Commit 2ca2c50b97f17bab99d67d6453ed73e2d05518c9
Merge branch 'dev' of http://gitlab1.renniting.cn/JCSS/urbanops into dev
# Conflicts: # urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/ErrorCodeConstants.java
Showing
279 changed files
with
10850 additions
and
810 deletions
Too many changes.
To preserve performance only 100 of 279 files are displayed.
.gitignore
| @@ -53,3 +53,15 @@ application-my.yaml | @@ -53,3 +53,15 @@ application-my.yaml | ||
| 53 | /urbanops-ui-app/unpackage/ | 53 | /urbanops-ui-app/unpackage/ |
| 54 | **/.DS_Store | 54 | **/.DS_Store |
| 55 | old/ | 55 | old/ |
| 56 | +/.claudeignore | ||
| 57 | +/docs/all_test.html | ||
| 58 | +/docs/ppt-assets/animations.css | ||
| 59 | +/docs/ppt-assets/base.css | ||
| 60 | +/CLAUDE.md | ||
| 61 | +/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/ErrorCodeConstants_手动操作.java | ||
| 62 | +/docs/ppt-assets/fonts.css | ||
| 63 | +/docs/ppt-assets/runtime.js | ||
| 64 | +/.claude/settings.local.json | ||
| 65 | +/docs/ppt-assets/style.css | ||
| 66 | +/docs/urbanops-architecture-ppt.html | ||
| 67 | +/docs/urbanops-tech-sharing.html |
pom.xml
| @@ -49,6 +49,7 @@ | @@ -49,6 +49,7 @@ | ||
| 49 | <spring.boot.version>3.5.5</spring.boot.version> | 49 | <spring.boot.version>3.5.5</spring.boot.version> |
| 50 | <mapstruct.version>1.6.3</mapstruct.version> | 50 | <mapstruct.version>1.6.3</mapstruct.version> |
| 51 | <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | 51 | <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
| 52 | + <maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format> | ||
| 52 | </properties> | 53 | </properties> |
| 53 | 54 | ||
| 54 | <dependencyManagement> | 55 | <dependencyManagement> |
sql/mysql/garden_problem_type-fix.sql
0 → 100644
| 1 | +-- ================================================= | ||
| 2 | +-- garden_problem_type 表结构补全 | ||
| 3 | +-- 原因:BaseDO 包含 create_time/update_time/creator/updater/deleted | ||
| 4 | +-- MyBatis Plus @TableLogic 自动 WHERE deleted=0 | ||
| 5 | +-- 缺少这些列会导致 SQL 报错或无数据返回 | ||
| 6 | +-- ================================================= | ||
| 7 | + | ||
| 8 | +-- 如果表已存在数据,先备份 | ||
| 9 | +-- CREATE TABLE garden_problem_type_bak AS SELECT * FROM garden_problem_type; | ||
| 10 | + | ||
| 11 | +-- 方案1:删表重建(无重要数据时) | ||
| 12 | +DROP TABLE IF EXISTS `garden_problem_type`; | ||
| 13 | +CREATE TABLE `garden_problem_type` ( | ||
| 14 | + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', | ||
| 15 | + `type_code` varchar(32) NOT NULL COMMENT '问题类型编码', | ||
| 16 | + `type_name` varchar(64) NOT NULL COMMENT '问题类型名称', | ||
| 17 | + `level` tinyint NOT NULL COMMENT '层级:1一级 2二级 3三级', | ||
| 18 | + `parent_code` varchar(32) DEFAULT NULL COMMENT '父级类型编码', | ||
| 19 | + `sort` int DEFAULT 0 COMMENT '排序序号', | ||
| 20 | + `status` tinyint DEFAULT 1 COMMENT '状态 1启用 0禁用', | ||
| 21 | + `creator` varchar(64) DEFAULT '' COMMENT '创建者', | ||
| 22 | + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | ||
| 23 | + `updater` varchar(64) DEFAULT '' COMMENT '更新者', | ||
| 24 | + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', | ||
| 25 | + `deleted` tinyint NOT NULL DEFAULT 0 COMMENT '逻辑删除 0正常 1删除', | ||
| 26 | + PRIMARY KEY (`id`), | ||
| 27 | + UNIQUE KEY `uk_type_code` (`type_code`) | ||
| 28 | +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='问题类型三级分类表'; | ||
| 29 | + | ||
| 30 | +-- 方案2:已有数据时,用 ALTER 补齐缺失列(按需执行) | ||
| 31 | +-- ALTER TABLE garden_problem_type ADD COLUMN `creator` varchar(64) DEFAULT '' COMMENT '创建者' AFTER `status`; | ||
| 32 | +-- ALTER TABLE garden_problem_type ADD COLUMN `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' AFTER `creator`; | ||
| 33 | +-- ALTER TABLE garden_problem_type ADD COLUMN `updater` varchar(64) DEFAULT '' COMMENT '更新者' AFTER `create_time`; | ||
| 34 | +-- ALTER TABLE garden_problem_type ADD COLUMN `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' AFTER `updater`; | ||
| 35 | +-- ALTER TABLE garden_problem_type ADD COLUMN `deleted` tinyint NOT NULL DEFAULT 0 COMMENT '逻辑删除' AFTER `update_time`; |
sql/mysql/problem-type-menu-auto.sql
0 → 100644
| 1 | +-- ================================================= | ||
| 2 | +-- 问题类型配置 - 菜单与权限 SQL(自动查找父菜单ID) | ||
| 3 | +-- 直接执行即可,自动从「工单管理」下挂载菜单 | ||
| 4 | +-- ================================================= | ||
| 5 | + | ||
| 6 | +-- 查询当前最大 ID 作为起始值 | ||
| 7 | +SET @maxId = (SELECT IFNULL(MAX(id), 5000) FROM system_menu); | ||
| 8 | + | ||
| 9 | +-- 查询工单管理 菜单ID | ||
| 10 | +SET @parentId = (SELECT id FROM system_menu WHERE name = '工单管理' AND type = 1 LIMIT 1); | ||
| 11 | + | ||
| 12 | +-- 如果找不到工单管理,尝试匹配 workorder 关键字 | ||
| 13 | +-- SET @parentId = (SELECT id FROM system_menu WHERE (name LIKE '%工单%' OR path LIKE '%workorder%') AND type = 1 LIMIT 1); | ||
| 14 | + | ||
| 15 | +-- 1. 二级菜单:问题类型 | ||
| 16 | +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) | ||
| 17 | +VALUES (@maxId + 1, '问题类型', '', 2, 10, @parentId, 'problem-type', 'ep:list', 'garden/problemType/index', 'ProblemType', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); | ||
| 18 | + | ||
| 19 | +-- 2. 按钮:查询 | ||
| 20 | +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) | ||
| 21 | +VALUES (@maxId + 2, '问题类型查询', 'garden:problem-type:query', 3, 1, @maxId + 1, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); | ||
| 22 | + | ||
| 23 | +-- 3. 按钮:创建 | ||
| 24 | +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) | ||
| 25 | +VALUES (@maxId + 3, '问题类型创建', 'garden:problem-type:create', 3, 2, @maxId + 1, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); | ||
| 26 | + | ||
| 27 | +-- 4. 按钮:更新 | ||
| 28 | +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) | ||
| 29 | +VALUES (@maxId + 4, '问题类型更新', 'garden:problem-type:update', 3, 3, @maxId + 1, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); | ||
| 30 | + | ||
| 31 | +-- 5. 按钮:删除 | ||
| 32 | +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) | ||
| 33 | +VALUES (@maxId + 5, '问题类型删除', 'garden:problem-type:delete', 3, 4, @maxId + 1, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
sql/mysql/problem-type-menu.sql
0 → 100644
| 1 | +-- ================================================= | ||
| 2 | +-- 问题类型配置 - 菜单与权限 SQL | ||
| 3 | +-- 说明: | ||
| 4 | +-- 1. 请先查询「工单管理」的菜单 ID,替换下面 @parentId 为实际值 | ||
| 5 | +-- 查询语句:SELECT id FROM system_menu WHERE name = '工单管理' AND type = 1; | ||
| 6 | +-- 2. 修改下面 @menuId 为可用的起始 ID(确保不与已有菜单 ID 冲突) | ||
| 7 | +-- 查询最大ID:SELECT MAX(id) FROM system_menu; | ||
| 8 | +-- 3. 执行前请备份 system_menu 表 | ||
| 9 | +-- ================================================= | ||
| 10 | + | ||
| 11 | +-- 请根据实际情况替换以下变量值: | ||
| 12 | +-- SET @parentId = (SELECT id FROM system_menu WHERE name = '工单管理' AND type = 1); | ||
| 13 | +-- SET @menuId = (SELECT IFNULL(MAX(id), 0) + 1 FROM system_menu); | ||
| 14 | + | ||
| 15 | +-- 示例:假设工单管理 parent_id = 2000,起始 menu_id = 5100 | ||
| 16 | + | ||
| 17 | +-- 1. 二级菜单:问题类型 | ||
| 18 | +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) | ||
| 19 | +VALUES (@menuId, '问题类型', '', 2, 10, @parentId, 'problem-type', 'ep:list', 'garden/problemType/index', 'ProblemType', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); | ||
| 20 | + | ||
| 21 | +-- 2. 按钮权限:查询 | ||
| 22 | +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) | ||
| 23 | +VALUES (@menuId + 1, '问题类型查询', 'garden:problem-type:query', 3, 1, @menuId, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); | ||
| 24 | + | ||
| 25 | +-- 3. 按钮权限:创建 | ||
| 26 | +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) | ||
| 27 | +VALUES (@menuId + 2, '问题类型创建', 'garden:problem-type:create', 3, 2, @menuId, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); | ||
| 28 | + | ||
| 29 | +-- 4. 按钮权限:更新 | ||
| 30 | +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) | ||
| 31 | +VALUES (@menuId + 3, '问题类型更新', 'garden:problem-type:update', 3, 3, @menuId, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); | ||
| 32 | + | ||
| 33 | +-- 5. 按钮权限:删除 | ||
| 34 | +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) | ||
| 35 | +VALUES (@menuId + 4, '问题类型删除', 'garden:problem-type:delete', 3, 4, @menuId, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
urbanops-dependencies/pom.xml
| @@ -76,6 +76,7 @@ | @@ -76,6 +76,7 @@ | ||
| 76 | <jimureport.version>2.1.1</jimureport.version> | 76 | <jimureport.version>2.1.1</jimureport.version> |
| 77 | <jimubi.version>2.1.0</jimubi.version> | 77 | <jimubi.version>2.1.0</jimubi.version> |
| 78 | <weixin-java.version>4.7.7-20250808.182223</weixin-java.version> | 78 | <weixin-java.version>4.7.7-20250808.182223</weixin-java.version> |
| 79 | + <maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format> | ||
| 79 | </properties> | 80 | </properties> |
| 80 | 81 | ||
| 81 | <dependencyManagement> | 82 | <dependencyManagement> |
urbanops-framework/urbanops-common/src/main/java/com/zteits/urbanops/framework/common/pojo/PageParam.java
| @@ -72,7 +72,8 @@ public class PageParam implements Serializable { | @@ -72,7 +72,8 @@ public class PageParam implements Serializable { | ||
| 72 | public void setOrderByColumn(String orderByColumn) { | 72 | public void setOrderByColumn(String orderByColumn) { |
| 73 | if (!StringUtils.hasText(orderByColumn)) { | 73 | if (!StringUtils.hasText(orderByColumn)) { |
| 74 | this.orderByColumn = "id"; | 74 | this.orderByColumn = "id"; |
| 75 | - return; | 75 | + } else { |
| 76 | + this.orderByColumn = orderByColumn; | ||
| 76 | } | 77 | } |
| 77 | 78 | ||
| 78 | } | 79 | } |
urbanops-framework/urbanops-common/src/main/java/com/zteits/urbanops/framework/common/util/date/DateUtils.java
| @@ -3,6 +3,7 @@ package com.zteits.urbanops.framework.common.util.date; | @@ -3,6 +3,7 @@ package com.zteits.urbanops.framework.common.util.date; | ||
| 3 | import cn.hutool.core.date.LocalDateTimeUtil; | 3 | import cn.hutool.core.date.LocalDateTimeUtil; |
| 4 | 4 | ||
| 5 | import java.time.*; | 5 | import java.time.*; |
| 6 | +import java.time.format.DateTimeFormatter; | ||
| 6 | import java.util.Calendar; | 7 | import java.util.Calendar; |
| 7 | import java.util.Date; | 8 | import java.util.Date; |
| 8 | 9 | ||
| @@ -18,6 +19,9 @@ public class DateUtils { | @@ -18,6 +19,9 @@ public class DateUtils { | ||
| 18 | */ | 19 | */ |
| 19 | public static final String TIME_ZONE_DEFAULT = "GMT+8"; | 20 | public static final String TIME_ZONE_DEFAULT = "GMT+8"; |
| 20 | 21 | ||
| 22 | + public static final ZoneId DEFAULT_ZONE = ZoneId.of("GMT+8"); // 东八区 | ||
| 23 | + | ||
| 24 | + | ||
| 21 | /** | 25 | /** |
| 22 | * 秒转换成毫秒 | 26 | * 秒转换成毫秒 |
| 23 | */ | 27 | */ |
| @@ -27,6 +31,10 @@ public class DateUtils { | @@ -27,6 +31,10 @@ public class DateUtils { | ||
| 27 | 31 | ||
| 28 | public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss"; | 32 | public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss"; |
| 29 | 33 | ||
| 34 | + public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); | ||
| 35 | + public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | ||
| 36 | + | ||
| 37 | + | ||
| 30 | /** | 38 | /** |
| 31 | * 将 LocalDateTime 转换成 Date | 39 | * 将 LocalDateTime 转换成 Date |
| 32 | * | 40 | * |
urbanops-framework/urbanops-common/src/main/java/com/zteits/urbanops/framework/common/util/validation/ValidationUtils.java
| @@ -18,8 +18,9 @@ import java.util.regex.Pattern; | @@ -18,8 +18,9 @@ import java.util.regex.Pattern; | ||
| 18 | */ | 18 | */ |
| 19 | public class ValidationUtils { | 19 | public class ValidationUtils { |
| 20 | 20 | ||
| 21 | - private static final Pattern PATTERN_MOBILE = Pattern.compile("^(?:(?:\\+|00)86)?1(?:(?:3[\\d])|(?:4[0,1,4-9])|(?:5[0-3,5-9])|(?:6[2,5-7])|(?:7[0-8])|(?:8[\\d])|(?:9[0-3,5-9]))\\d{8}$"); | ||
| 22 | - | 21 | + //private static final Pattern PATTERN_MOBILE = Pattern.compile("^(?:(?:\\+|00)86)?1(?:(?:3[\\d])|(?:4[0,1,4-9])|(?:5[0-3,5-9])|(?:6[2,5-7])|(?:7[0-8])|(?:8[\\d])|(?:9[0-3,5-9]))\\d{8}$"); |
| 22 | + //add by wq 20260327 手机号码校验覆盖全号段 | ||
| 23 | + private static final Pattern PATTERN_MOBILE = Pattern.compile("^(?:\\+86|0086)?1[3-9]\\d{9}$"); | ||
| 23 | private static final Pattern PATTERN_URL = Pattern.compile("^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"); | 24 | private static final Pattern PATTERN_URL = Pattern.compile("^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"); |
| 24 | 25 | ||
| 25 | private static final Pattern PATTERN_XML_NCNAME = Pattern.compile("[a-zA-Z_][\\-_.0-9_a-zA-Z$]*"); | 26 | private static final Pattern PATTERN_XML_NCNAME = Pattern.compile("[a-zA-Z_][\\-_.0-9_a-zA-Z$]*"); |
| @@ -51,5 +52,4 @@ public class ValidationUtils { | @@ -51,5 +52,4 @@ public class ValidationUtils { | ||
| 51 | throw new ConstraintViolationException(constraintViolations); | 52 | throw new ConstraintViolationException(constraintViolations); |
| 52 | } | 53 | } |
| 53 | } | 54 | } |
| 54 | - | ||
| 55 | } | 55 | } |
urbanops-framework/urbanops-spring-boot-starter-excel/src/main/java/com/zteits/urbanops/framework/excel/core/convert/BusinessLineConvert.java
0 → 100644
| 1 | +package com.zteits.urbanops.framework.excel.core.convert; | ||
| 2 | + | ||
| 3 | +import cn.idev.excel.converters.Converter; | ||
| 4 | +import cn.idev.excel.enums.CellDataTypeEnum; | ||
| 5 | +import cn.idev.excel.metadata.GlobalConfiguration; | ||
| 6 | +import cn.idev.excel.metadata.data.ReadCellData; | ||
| 7 | +import cn.idev.excel.metadata.data.WriteCellData; | ||
| 8 | +import cn.idev.excel.metadata.property.ExcelContentProperty; | ||
| 9 | +import lombok.extern.slf4j.Slf4j; | ||
| 10 | + | ||
| 11 | +@Slf4j | ||
| 12 | +public class BusinessLineConvert implements Converter<Object> { | ||
| 13 | + | ||
| 14 | + @Override | ||
| 15 | + public Class<?> supportJavaTypeKey() { | ||
| 16 | + throw new UnsupportedOperationException("暂不支持,也不需要"); | ||
| 17 | + } | ||
| 18 | + | ||
| 19 | + @Override | ||
| 20 | + public CellDataTypeEnum supportExcelTypeKey() { | ||
| 21 | + throw new UnsupportedOperationException("暂不支持,也不需要"); | ||
| 22 | + } | ||
| 23 | + | ||
| 24 | + /** | ||
| 25 | + * 导入:业务线名称(园林,市政) → 编码(yl,sz) | ||
| 26 | + */ | ||
| 27 | + @Override | ||
| 28 | + public Object convertToJavaData(ReadCellData<?> readCellData, ExcelContentProperty contentProperty, | ||
| 29 | + GlobalConfiguration globalConfiguration) { | ||
| 30 | + String cellValue = readCellData.getStringValue(); | ||
| 31 | + if (cellValue == null || cellValue.isBlank()) { | ||
| 32 | + return null; | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + try { | ||
| 36 | + // 按逗号切割 | ||
| 37 | + String[] lineArray = cellValue.split(","); | ||
| 38 | + StringBuilder codeSb = new StringBuilder(); | ||
| 39 | + | ||
| 40 | + for (String line : lineArray) { | ||
| 41 | + String code = convertLineToCode(line.trim()); | ||
| 42 | + if (codeSb.length() > 0) { | ||
| 43 | + codeSb.append(","); | ||
| 44 | + } | ||
| 45 | + codeSb.append(code); | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + return codeSb.toString(); | ||
| 49 | + } catch (Exception e) { | ||
| 50 | + log.error("[convertToJavaData][业务线转换异常] {}", cellValue, e); | ||
| 51 | + return null; | ||
| 52 | + } | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + /** | ||
| 56 | + * 导出:业务线编码(yl,sz) → 名称(园林,市政) | ||
| 57 | + */ | ||
| 58 | + @Override | ||
| 59 | + public WriteCellData<?> convertToExcelData(Object value, ExcelContentProperty contentProperty, | ||
| 60 | + GlobalConfiguration globalConfiguration) { | ||
| 61 | + if (value == null) { | ||
| 62 | + return new WriteCellData<>(""); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + try { | ||
| 66 | + String codeValue = String.valueOf(value); | ||
| 67 | + String[] codeArray = codeValue.split(","); | ||
| 68 | + StringBuilder nameSb = new StringBuilder(); | ||
| 69 | + | ||
| 70 | + for (String code : codeArray) { | ||
| 71 | + String name = convertCodeToLine(code.trim()); | ||
| 72 | + if (nameSb.length() > 0) { | ||
| 73 | + nameSb.append(","); | ||
| 74 | + } | ||
| 75 | + nameSb.append(name); | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + return new WriteCellData<>(nameSb.toString()); | ||
| 79 | + } catch (Exception e) { | ||
| 80 | + log.error("[convertToExcelData][业务线转换异常] {}", value, e); | ||
| 81 | + return new WriteCellData<>(""); | ||
| 82 | + } | ||
| 83 | + } | ||
| 84 | + | ||
| 85 | + /** | ||
| 86 | + * 名称 → 编码 | ||
| 87 | + */ | ||
| 88 | + private String convertLineToCode(String line) { | ||
| 89 | + return switch (line) { | ||
| 90 | + case "园林" -> "yl"; | ||
| 91 | + case "市政" -> "sz"; | ||
| 92 | + case "物业" -> "wy"; | ||
| 93 | + case "秩序管理" -> "zx"; | ||
| 94 | + case "环境卫生" -> "hj"; | ||
| 95 | + default -> ""; | ||
| 96 | + }; | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + /** | ||
| 100 | + * 编码 → 名称 | ||
| 101 | + */ | ||
| 102 | + private String convertCodeToLine(String code) { | ||
| 103 | + return switch (code) { | ||
| 104 | + case "yl" -> "园林"; | ||
| 105 | + case "sz" -> "市政"; | ||
| 106 | + case "wy" -> "物业"; | ||
| 107 | + case "zx" -> "秩序管理"; | ||
| 108 | + case "hj" -> "环境卫生"; | ||
| 109 | + default -> ""; | ||
| 110 | + }; | ||
| 111 | + } | ||
| 112 | +} |
urbanops-framework/urbanops-spring-boot-starter-excel/src/main/java/com/zteits/urbanops/framework/excel/core/convert/ImageListConverter.java
0 → 100644
| 1 | +package com.zteits.urbanops.framework.excel.core.convert; | ||
| 2 | + | ||
| 3 | +import cn.idev.excel.converters.Converter; | ||
| 4 | +import cn.idev.excel.enums.CellDataTypeEnum; | ||
| 5 | +import cn.idev.excel.metadata.GlobalConfiguration; | ||
| 6 | +import cn.idev.excel.metadata.data.ImageData; | ||
| 7 | +import cn.idev.excel.metadata.data.ReadCellData; | ||
| 8 | +import cn.idev.excel.metadata.data.WriteCellData; | ||
| 9 | +import cn.idev.excel.metadata.property.ExcelContentProperty; | ||
| 10 | +import cn.idev.excel.util.FileUtils; | ||
| 11 | +import cn.idev.excel.util.ListUtils; | ||
| 12 | +import lombok.extern.slf4j.Slf4j; | ||
| 13 | +import org.springframework.util.StringUtils; | ||
| 14 | + | ||
| 15 | +import java.io.ByteArrayOutputStream; | ||
| 16 | +import java.io.File; | ||
| 17 | +import java.io.InputStream; | ||
| 18 | +import java.net.HttpURLConnection; | ||
| 19 | +import java.net.URL; | ||
| 20 | +import java.util.List; | ||
| 21 | + | ||
| 22 | +@Slf4j | ||
| 23 | +public class ImageListConverter implements Converter<List<String>> { | ||
| 24 | + | ||
| 25 | + // 横向排列:每张图片宽度 + 间距 | ||
| 26 | + private static final int IMAGE_WIDTH = 120; | ||
| 27 | + private static final int IMAGE_GAP = 15; | ||
| 28 | + private static final int MAX_IMAGE_SIZE = 10 * 1024 * 1024; | ||
| 29 | + private static final int CONNECT_TIMEOUT = 5000; | ||
| 30 | + private static final int READ_TIMEOUT = 10000; | ||
| 31 | + | ||
| 32 | + @Override | ||
| 33 | + public Class<?> supportJavaTypeKey() { | ||
| 34 | + return List.class; | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + @Override | ||
| 38 | + public CellDataTypeEnum supportExcelTypeKey() { | ||
| 39 | + return CellDataTypeEnum.EMPTY; | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + @Override | ||
| 43 | + public List<String> convertToJavaData(ReadCellData readCellData, ExcelContentProperty contentProperty, | ||
| 44 | + GlobalConfiguration globalConfiguration) { | ||
| 45 | + return null; | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + @Override | ||
| 49 | + public WriteCellData<?> convertToExcelData(List<String> imageList, ExcelContentProperty contentProperty, | ||
| 50 | + GlobalConfiguration globalConfiguration) { | ||
| 51 | + try { | ||
| 52 | + if (imageList == null || imageList.isEmpty()) { | ||
| 53 | + return new WriteCellData<>("无图片"); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + List<ImageData> imageDataList = ListUtils.newArrayList(); | ||
| 57 | + int leftOffset = 0; // 横向偏移量 | ||
| 58 | + | ||
| 59 | + for (String path : imageList) { | ||
| 60 | + if (!StringUtils.hasText(path)) continue; | ||
| 61 | + | ||
| 62 | + byte[] imageBytes = path.startsWith("http") ? loadNetworkImage(path) : loadLocalImage(path); | ||
| 63 | + if (imageBytes == null || imageBytes.length == 0 || imageBytes.length > MAX_IMAGE_SIZE) { | ||
| 64 | + log.warn("跳过无效图片:{}", path); | ||
| 65 | + continue; | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + ImageData imageData = new ImageData(); | ||
| 69 | + imageData.setImage(imageBytes); | ||
| 70 | + imageData.setImageType(ImageData.ImageType.PICTURE_TYPE_PNG); | ||
| 71 | + | ||
| 72 | + // ====================== 核心:横向偏移 ====================== | ||
| 73 | + imageData.setLeft(leftOffset); | ||
| 74 | + // ============================================================= | ||
| 75 | + | ||
| 76 | + imageDataList.add(imageData); | ||
| 77 | + leftOffset += IMAGE_WIDTH + IMAGE_GAP; | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + if (imageDataList.isEmpty()) { | ||
| 81 | + return new WriteCellData<>("无有效图片"); | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + WriteCellData<?> writeCellData = new WriteCellData<>(); | ||
| 85 | + writeCellData.setType(CellDataTypeEnum.EMPTY); | ||
| 86 | + writeCellData.setImageDataList(imageDataList); | ||
| 87 | + | ||
| 88 | + return writeCellData; | ||
| 89 | + | ||
| 90 | + } catch (Exception e) { | ||
| 91 | + log.error("图片导出失败", e); | ||
| 92 | + return new WriteCellData<>("图片加载失败"); | ||
| 93 | + } | ||
| 94 | + } | ||
| 95 | + | ||
| 96 | + private byte[] loadLocalImage(String imagePath) throws Exception { | ||
| 97 | + File file = new File(imagePath); | ||
| 98 | + if (!file.exists() || !file.isFile()) { | ||
| 99 | + log.warn("本地图片不存在:{}", imagePath); | ||
| 100 | + return null; | ||
| 101 | + } | ||
| 102 | + return FileUtils.readFileToByteArray(file); | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + private byte[] loadNetworkImage(String imageUrl) throws Exception { | ||
| 106 | + URL url = new URL(imageUrl); | ||
| 107 | + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); | ||
| 108 | + conn.setConnectTimeout(CONNECT_TIMEOUT); | ||
| 109 | + conn.setReadTimeout(READ_TIMEOUT); | ||
| 110 | + try { | ||
| 111 | + if (conn.getResponseCode() != 200) return null; | ||
| 112 | + try (InputStream in = conn.getInputStream(); ByteArrayOutputStream out = new ByteArrayOutputStream()) { | ||
| 113 | + byte[] buffer = new byte[4096]; | ||
| 114 | + int len; | ||
| 115 | + while ((len = in.read(buffer)) != -1) out.write(buffer, 0, len); | ||
| 116 | + return out.toByteArray(); | ||
| 117 | + } | ||
| 118 | + } finally { | ||
| 119 | + conn.disconnect(); | ||
| 120 | + } | ||
| 121 | + } | ||
| 122 | +} |
urbanops-framework/urbanops-spring-boot-starter-excel/src/main/java/com/zteits/urbanops/framework/excel/core/convert/ListToStringConverter.java
0 → 100644
| 1 | +package com.zteits.urbanops.framework.excel.core.convert; | ||
| 2 | +import cn.idev.excel.converters.Converter; | ||
| 3 | +import cn.hutool.core.collection.CollectionUtil; | ||
| 4 | +import cn.idev.excel.enums.CellDataTypeEnum; | ||
| 5 | +import cn.idev.excel.metadata.GlobalConfiguration; | ||
| 6 | +import cn.idev.excel.metadata.data.WriteCellData; | ||
| 7 | +import cn.idev.excel.metadata.property.ExcelContentProperty; | ||
| 8 | + | ||
| 9 | +import java.util.List; | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * List 转 Excel 字符串转换器(将List用逗号拼接成字符串) | ||
| 13 | + */ | ||
| 14 | +public class ListToStringConverter implements Converter<List<?>> { | ||
| 15 | + | ||
| 16 | + @Override | ||
| 17 | + public Class<?> supportJavaTypeKey() { | ||
| 18 | + // 声明支持的Java类型:List | ||
| 19 | + return List.class; | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | + @Override | ||
| 23 | + public CellDataTypeEnum supportExcelTypeKey() { | ||
| 24 | + // Excel单元格类型:字符串 | ||
| 25 | + return CellDataTypeEnum.STRING; | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + @Override | ||
| 29 | + public WriteCellData<?> convertToExcelData(List<?> value, ExcelContentProperty contentProperty, | ||
| 30 | + GlobalConfiguration globalConfiguration) { | ||
| 31 | + // 核心转换逻辑:List为空返回空字符串,否则用逗号拼接 | ||
| 32 | + if (CollectionUtil.isEmpty(value)) { | ||
| 33 | + return new WriteCellData<>(""); | ||
| 34 | + } | ||
| 35 | + String joinStr = String.join(",", value.stream() | ||
| 36 | + .map(Object::toString) | ||
| 37 | + .toArray(String[]::new)); | ||
| 38 | + return new WriteCellData<>(joinStr); | ||
| 39 | + } | ||
| 40 | +} | ||
| 0 | \ No newline at end of file | 41 | \ No newline at end of file |
urbanops-framework/urbanops-spring-boot-starter-excel/src/main/java/com/zteits/urbanops/framework/excel/core/handler/ImageColumnWidthHandler.java
0 → 100644
| 1 | +package com.zteits.urbanops.framework.excel.core.handler; | ||
| 2 | + | ||
| 3 | +import cn.idev.excel.write.handler.SheetWriteHandler; | ||
| 4 | +import cn.idev.excel.write.handler.context.SheetWriteHandlerContext; | ||
| 5 | +import lombok.RequiredArgsConstructor; | ||
| 6 | +import org.apache.poi.ss.usermodel.Sheet; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * 图片列自动加宽处理器 | ||
| 10 | + */ | ||
| 11 | +@RequiredArgsConstructor | ||
| 12 | +public class ImageColumnWidthHandler implements SheetWriteHandler { | ||
| 13 | + | ||
| 14 | + // 需要加宽的列索引(从0开始),比如你的图片列在第3列,就传2 | ||
| 15 | + private final int imageColumnIndex; | ||
| 16 | + // 加宽后的列宽(单位:字符宽度,Excel默认1个字符宽度≈256像素) | ||
| 17 | + private final int columnWidth; | ||
| 18 | + | ||
| 19 | + @Override | ||
| 20 | + public void afterSheetCreate(SheetWriteHandlerContext context) { | ||
| 21 | + Sheet sheet = context.getWriteSheetHolder().getSheet(); | ||
| 22 | + // 设置指定列的宽度 | ||
| 23 | + sheet.setColumnWidth(imageColumnIndex, columnWidth); | ||
| 24 | + } | ||
| 25 | +} |
urbanops-framework/urbanops-spring-boot-starter-excel/src/main/java/com/zteits/urbanops/framework/excel/core/util/ExcelUtils.java
| @@ -44,9 +44,27 @@ public class ExcelUtils { | @@ -44,9 +44,27 @@ public class ExcelUtils { | ||
| 44 | } | 44 | } |
| 45 | 45 | ||
| 46 | public static <T> List<T> read(MultipartFile file, Class<T> head) throws IOException { | 46 | public static <T> List<T> read(MultipartFile file, Class<T> head) throws IOException { |
| 47 | - return FastExcelFactory.read(file.getInputStream(), head, null) | ||
| 48 | - .autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理 | ||
| 49 | - .doReadAllSync(); | 47 | + List<T> list = FastExcelFactory.read(file.getInputStream(), head, null) |
| 48 | + .autoCloseStream(false) // 不要自动关闭,交给 Servlet 自己处理 | ||
| 49 | + .doReadAllSync(); | ||
| 50 | + | ||
| 51 | + // 过滤:对象不为 null + 不是全字段 null | ||
| 52 | + if (list != null) { | ||
| 53 | + list.removeIf(item -> { | ||
| 54 | + if (item == null) return true; | ||
| 55 | + // 判断所有字段是否都为 null | ||
| 56 | + for (java.lang.reflect.Field field : item.getClass().getDeclaredFields()) { | ||
| 57 | + field.setAccessible(true); | ||
| 58 | + try { | ||
| 59 | + if (field.get(item) != null) { | ||
| 60 | + return false; | ||
| 61 | + } | ||
| 62 | + } catch (Exception e) { } | ||
| 63 | + } | ||
| 64 | + return true; | ||
| 65 | + }); | ||
| 66 | + } | ||
| 67 | + return list; | ||
| 50 | } | 68 | } |
| 51 | 69 | ||
| 52 | public static <T> List<T> read(MultipartFile file, Class<T> head, Integer startIndex) throws IOException { | 70 | public static <T> List<T> read(MultipartFile file, Class<T> head, Integer startIndex) throws IOException { |
urbanops-module-api/urbanops-module-garden-api/src/main/java/com/zteits/urbanops/module/garden/dto/material/MaterialInventoryOutDto.java
| @@ -17,6 +17,9 @@ public class MaterialInventoryOutDto { | @@ -17,6 +17,9 @@ public class MaterialInventoryOutDto { | ||
| 17 | @Schema(description = "入库ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18713") | 17 | @Schema(description = "入库ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18713") |
| 18 | private Long id; | 18 | private Long id; |
| 19 | 19 | ||
| 20 | + @Schema(description = "库存ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "111") | ||
| 21 | + private Long inventoryId; | ||
| 22 | + | ||
| 20 | @Schema(description = "物料ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14541") | 23 | @Schema(description = "物料ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14541") |
| 21 | @NotNull(message = "物料ID不能为空") | 24 | @NotNull(message = "物料ID不能为空") |
| 22 | private Long materialId; | 25 | private Long materialId; |
urbanops-module-api/urbanops-module-garden-api/src/main/java/com/zteits/urbanops/module/garden/dto/road/RoadReqDTO.java
| @@ -22,4 +22,6 @@ public class RoadReqDTO { | @@ -22,4 +22,6 @@ public class RoadReqDTO { | ||
| 22 | @Schema(description = "维度", example = "121.40476") | 22 | @Schema(description = "维度", example = "121.40476") |
| 23 | private String latitude; | 23 | private String latitude; |
| 24 | 24 | ||
| 25 | + @Schema(description = "道路名称", example = "中国") | ||
| 26 | + private String roadName; | ||
| 25 | } | 27 | } |
urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmTaskApiImpl.java
| @@ -15,6 +15,7 @@ import org.springframework.util.StringUtils; | @@ -15,6 +15,7 @@ import org.springframework.util.StringUtils; | ||
| 15 | import org.springframework.validation.annotation.Validated; | 15 | import org.springframework.validation.annotation.Validated; |
| 16 | 16 | ||
| 17 | import java.util.*; | 17 | import java.util.*; |
| 18 | +import java.util.stream.Collectors; | ||
| 18 | import java.util.stream.Stream; | 19 | import java.util.stream.Stream; |
| 19 | 20 | ||
| 20 | import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.convertSetByFlatMap; | 21 | import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.convertSetByFlatMap; |
| @@ -69,8 +70,13 @@ public class BpmTaskApiImpl implements BpmTaskApi{ | @@ -69,8 +70,13 @@ public class BpmTaskApiImpl implements BpmTaskApi{ | ||
| 69 | Set<Long> userIds = convertSetByFlatMap(taskList, task -> | 70 | Set<Long> userIds = convertSetByFlatMap(taskList, task -> |
| 70 | Stream.of(NumberUtils.parseLong(task.getAssignee()), NumberUtils.parseLong(task.getOwner()))); | 71 | Stream.of(NumberUtils.parseLong(task.getAssignee()), NumberUtils.parseLong(task.getOwner()))); |
| 71 | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds); | 72 | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds); |
| 73 | + | ||
| 74 | + // 过滤掉所有deleteReason = MI_END的任务,再进行遍历 | ||
| 75 | + List<HistoricTaskInstance> nonMIEndTaskList = taskList.stream() | ||
| 76 | + .filter(task -> !"MI_END".equals(task.getDeleteReason())) | ||
| 77 | + .collect(Collectors.toList()); | ||
| 72 | // 5. 按任务结束时间倒序→创建时间倒序排序,确保取到最新任务 | 78 | // 5. 按任务结束时间倒序→创建时间倒序排序,确保取到最新任务 |
| 73 | - HistoricTaskInstance lastTask = taskList.stream() | 79 | + HistoricTaskInstance lastTask = nonMIEndTaskList.stream() |
| 74 | .reduce((first, last) -> last) // 遍历到最后一个元素 | 80 | .reduce((first, last) -> last) // 遍历到最后一个元素 |
| 75 | .orElse(null); // 空列表返回null | 81 | .orElse(null); // 空列表返回null |
| 76 | // 存储最后一个任务,后续封装VO | 82 | // 存储最后一个任务,后续封装VO |
urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/controller/admin/task/BpmProcessInstanceController.java
| @@ -23,6 +23,7 @@ import io.swagger.v3.oas.annotations.Operation; | @@ -23,6 +23,7 @@ import io.swagger.v3.oas.annotations.Operation; | ||
| 23 | import io.swagger.v3.oas.annotations.Parameter; | 23 | import io.swagger.v3.oas.annotations.Parameter; |
| 24 | import io.swagger.v3.oas.annotations.tags.Tag; | 24 | import io.swagger.v3.oas.annotations.tags.Tag; |
| 25 | import jakarta.annotation.Resource; | 25 | import jakarta.annotation.Resource; |
| 26 | +import jakarta.annotation.security.PermitAll; | ||
| 26 | import jakarta.validation.Valid; | 27 | import jakarta.validation.Valid; |
| 27 | import org.flowable.engine.history.HistoricProcessInstance; | 28 | import org.flowable.engine.history.HistoricProcessInstance; |
| 28 | import org.flowable.engine.repository.ProcessDefinition; | 29 | import org.flowable.engine.repository.ProcessDefinition; |
| @@ -173,7 +174,8 @@ public class BpmProcessInstanceController { | @@ -173,7 +174,8 @@ public class BpmProcessInstanceController { | ||
| 173 | @GetMapping("/get-approval-detail") | 174 | @GetMapping("/get-approval-detail") |
| 174 | @Operation(summary = "获得审批详情") | 175 | @Operation(summary = "获得审批详情") |
| 175 | @Parameter(name = "id", description = "流程实例的编号", required = true) | 176 | @Parameter(name = "id", description = "流程实例的编号", required = true) |
| 176 | - @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')") | 177 | + //@PreAuthorize("@ss.hasPermission('bpm:process-instance:query')") |
| 178 | + @PermitAll | ||
| 177 | @SuppressWarnings("unchecked") | 179 | @SuppressWarnings("unchecked") |
| 178 | public CommonResult<BpmApprovalDetailRespVO> getApprovalDetail(@Valid BpmApprovalDetailReqVO reqVO) { | 180 | public CommonResult<BpmApprovalDetailRespVO> getApprovalDetail(@Valid BpmApprovalDetailReqVO reqVO) { |
| 179 | if (StrUtil.isNotEmpty(reqVO.getProcessVariablesStr())) { | 181 | if (StrUtil.isNotEmpty(reqVO.getProcessVariablesStr())) { |
urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/controller/admin/task/BpmTaskController.java
| @@ -20,6 +20,7 @@ import io.swagger.v3.oas.annotations.Operation; | @@ -20,6 +20,7 @@ import io.swagger.v3.oas.annotations.Operation; | ||
| 20 | import io.swagger.v3.oas.annotations.Parameter; | 20 | import io.swagger.v3.oas.annotations.Parameter; |
| 21 | import io.swagger.v3.oas.annotations.tags.Tag; | 21 | import io.swagger.v3.oas.annotations.tags.Tag; |
| 22 | import jakarta.annotation.Resource; | 22 | import jakarta.annotation.Resource; |
| 23 | +import jakarta.annotation.security.PermitAll; | ||
| 23 | import jakarta.validation.Valid; | 24 | import jakarta.validation.Valid; |
| 24 | import org.flowable.bpmn.model.UserTask; | 25 | import org.flowable.bpmn.model.UserTask; |
| 25 | import org.flowable.engine.history.HistoricProcessInstance; | 26 | import org.flowable.engine.history.HistoricProcessInstance; |
| @@ -124,7 +125,8 @@ public class BpmTaskController { | @@ -124,7 +125,8 @@ public class BpmTaskController { | ||
| 124 | @GetMapping("/list-by-process-instance-id") | 125 | @GetMapping("/list-by-process-instance-id") |
| 125 | @Operation(summary = "获得指定流程实例的任务列表", description = "包括完成的、未完成的") | 126 | @Operation(summary = "获得指定流程实例的任务列表", description = "包括完成的、未完成的") |
| 126 | @Parameter(name = "processInstanceId", description = "流程实例的编号", required = true) | 127 | @Parameter(name = "processInstanceId", description = "流程实例的编号", required = true) |
| 127 | - @PreAuthorize("@ss.hasPermission('bpm:task:query')") | 128 | + //@PreAuthorize("@ss.hasPermission('bpm:task:query')") |
| 129 | + @PermitAll | ||
| 128 | public CommonResult<List<BpmTaskRespVO>> getTaskListByProcessInstanceId( | 130 | public CommonResult<List<BpmTaskRespVO>> getTaskListByProcessInstanceId( |
| 129 | @RequestParam("processInstanceId") String processInstanceId) { | 131 | @RequestParam("processInstanceId") String processInstanceId) { |
| 130 | List<HistoricTaskInstance> taskList = taskService.getTaskListByProcessInstanceId(processInstanceId, true); | 132 | List<HistoricTaskInstance> taskList = taskService.getTaskListByProcessInstanceId(processInstanceId, true); |
urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/service/task/BpmTaskServiceImpl.java
| @@ -286,7 +286,14 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -286,7 +286,14 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 286 | || task.getCreateTime().before(DateUtils.of(pageVO.getCreateTime()[0])) | 286 | || task.getCreateTime().before(DateUtils.of(pageVO.getCreateTime()[0])) |
| 287 | || task.getCreateTime().after(DateUtils.of(pageVO.getCreateTime()[1]))); | 287 | || task.getCreateTime().after(DateUtils.of(pageVO.getCreateTime()[1]))); |
| 288 | } | 288 | } |
| 289 | - return new PageResult<>(tasks, count); | 289 | + |
| 290 | + // 过滤掉所有deleteReason = MI_END的任务,再进行遍历 解决管理端 或签任务展示 系统自动取消的问题 | ||
| 291 | + List<HistoricTaskInstance> nonMIEndTaskList = tasks.stream() | ||
| 292 | + .filter(task -> !"MI_END".equals(task.getDeleteReason())) | ||
| 293 | + .collect(Collectors.toList()); | ||
| 294 | + | ||
| 295 | + | ||
| 296 | + return new PageResult<>(nonMIEndTaskList, count); | ||
| 290 | } | 297 | } |
| 291 | 298 | ||
| 292 | @Override | 299 | @Override |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/api/road/RoadApiImpl.java
| @@ -14,6 +14,7 @@ import jakarta.annotation.Resource; | @@ -14,6 +14,7 @@ import jakarta.annotation.Resource; | ||
| 14 | import lombok.extern.slf4j.Slf4j; | 14 | import lombok.extern.slf4j.Slf4j; |
| 15 | import org.springframework.beans.factory.annotation.Value; | 15 | import org.springframework.beans.factory.annotation.Value; |
| 16 | import org.springframework.stereotype.Service; | 16 | import org.springframework.stereotype.Service; |
| 17 | +import org.springframework.util.StringUtils; | ||
| 17 | 18 | ||
| 18 | import java.util.ArrayList; | 19 | import java.util.ArrayList; |
| 19 | import java.util.HashMap; | 20 | import java.util.HashMap; |
| @@ -44,9 +45,12 @@ public class RoadApiImpl implements RoadApi { | @@ -44,9 +45,12 @@ public class RoadApiImpl implements RoadApi { | ||
| 44 | param.put("companyCode", reqDTO.getBusiLine()); | 45 | param.put("companyCode", reqDTO.getBusiLine()); |
| 45 | param.put("longitude", reqDTO.getLongitude()); | 46 | param.put("longitude", reqDTO.getLongitude()); |
| 46 | param.put("latitude", reqDTO.getLatitude()); | 47 | param.put("latitude", reqDTO.getLatitude()); |
| 48 | + if (StringUtils.hasText(reqDTO.getRoadName())) { | ||
| 49 | + param.put("roadName", reqDTO.getRoadName()); | ||
| 50 | + } | ||
| 47 | 51 | ||
| 48 | String responseBody = HttpUtils.post(roadInfoUrl, null, JSON.toJSONString(param)); | 52 | String responseBody = HttpUtils.post(roadInfoUrl, null, JSON.toJSONString(param)); |
| 49 | - log.info("获取道路信息接口,系统:{},经度:{},维度:{},返回结果:{}", reqDTO.getBusiLine(), reqDTO.getLongitude(), reqDTO.getLatitude(), responseBody); | 53 | + log.info("获取道路信息接口,系统:{},经度:{},维度:{},roadName:{},返回结果:{}", reqDTO.getBusiLine(), reqDTO.getLongitude(), reqDTO.getLatitude(), reqDTO.getRoadName(), responseBody); |
| 50 | JSONObject response = JSONUtil.parseObj(responseBody); | 54 | JSONObject response = JSONUtil.parseObj(responseBody); |
| 51 | if (response.getInt("code") != 200) { | 55 | if (response.getInt("code") != 200) { |
| 52 | return new ArrayList<>(); | 56 | return new ArrayList<>(); |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasks/AssignTasksController.java
| 1 | package com.zteits.urbanops.module.garden.controller.admin.assigntasks; | 1 | package com.zteits.urbanops.module.garden.controller.admin.assigntasks; |
| 2 | 2 | ||
| 3 | import cn.hutool.core.collection.CollectionUtil; | 3 | import cn.hutool.core.collection.CollectionUtil; |
| 4 | -import cn.hutool.core.util.StrUtil; | ||
| 5 | import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; | 4 | import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; |
| 6 | import com.zteits.urbanops.framework.common.pojo.CommonResult; | 5 | import com.zteits.urbanops.framework.common.pojo.CommonResult; |
| 7 | import com.zteits.urbanops.framework.common.pojo.PageParam; | 6 | import com.zteits.urbanops.framework.common.pojo.PageParam; |
| 8 | import com.zteits.urbanops.framework.common.pojo.PageResult; | 7 | import com.zteits.urbanops.framework.common.pojo.PageResult; |
| 9 | import com.zteits.urbanops.framework.common.util.object.BeanUtils; | 8 | import com.zteits.urbanops.framework.common.util.object.BeanUtils; |
| 10 | import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; | 9 | import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; |
| 11 | -import com.zteits.urbanops.framework.translate.core.TranslateUtils; | ||
| 12 | import com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo.AssignTasksPageReqVO; | 10 | import com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo.AssignTasksPageReqVO; |
| 13 | import com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo.AssignTasksRespVO; | 11 | import com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo.AssignTasksRespVO; |
| 14 | import com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo.AssignTasksSaveReqVO; | 12 | import com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo.AssignTasksSaveReqVO; |
| 13 | +import com.zteits.urbanops.module.garden.controller.admin.unitintegraltotal.vo.UnitIntegralRespVO; | ||
| 14 | +import com.zteits.urbanops.module.garden.convert.AssignTaskConvert; | ||
| 15 | import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO; | 15 | import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO; |
| 16 | import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO; | 16 | import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO; |
| 17 | import com.zteits.urbanops.module.garden.service.assigntasks.AssignTasksService; | 17 | import com.zteits.urbanops.module.garden.service.assigntasks.AssignTasksService; |
| 18 | import com.zteits.urbanops.module.garden.service.assigntasksinfo.AssignTasksInfoService; | 18 | import com.zteits.urbanops.module.garden.service.assigntasksinfo.AssignTasksInfoService; |
| 19 | +import com.zteits.urbanops.module.garden.service.unitintegraltotal.UnitIntegralService; | ||
| 19 | import io.swagger.v3.oas.annotations.Operation; | 20 | import io.swagger.v3.oas.annotations.Operation; |
| 20 | import io.swagger.v3.oas.annotations.Parameter; | 21 | import io.swagger.v3.oas.annotations.Parameter; |
| 21 | import io.swagger.v3.oas.annotations.tags.Tag; | 22 | import io.swagger.v3.oas.annotations.tags.Tag; |
| @@ -46,6 +47,9 @@ public class AssignTasksController { | @@ -46,6 +47,9 @@ public class AssignTasksController { | ||
| 46 | @Resource | 47 | @Resource |
| 47 | private AssignTasksInfoService asignTasksInfoService; | 48 | private AssignTasksInfoService asignTasksInfoService; |
| 48 | 49 | ||
| 50 | + @Resource | ||
| 51 | + private UnitIntegralService unitIntegralService; | ||
| 52 | + | ||
| 49 | @PostMapping("/create") | 53 | @PostMapping("/create") |
| 50 | @Operation(summary = "创建派单任务主表(记录派单任务基本信息)") | 54 | @Operation(summary = "创建派单任务主表(记录派单任务基本信息)") |
| 51 | @PreAuthorize("@ss.hasPermission('garden:assign-tasks:create')") | 55 | @PreAuthorize("@ss.hasPermission('garden:assign-tasks:create')") |
| @@ -90,7 +94,13 @@ public class AssignTasksController { | @@ -90,7 +94,13 @@ public class AssignTasksController { | ||
| 90 | } | 94 | } |
| 91 | AssignTasksRespVO assignTasksRespVO = BeanUtils.toBean(assignTasks, AssignTasksRespVO.class); | 95 | AssignTasksRespVO assignTasksRespVO = BeanUtils.toBean(assignTasks, AssignTasksRespVO.class); |
| 92 | List<AssignTasksInfoDO> assignTaskInfoList = asignTasksInfoService.getAssignTasksInfos(assignTasks.getId()); | 96 | List<AssignTasksInfoDO> assignTaskInfoList = asignTasksInfoService.getAssignTasksInfos(assignTasks.getId()); |
| 93 | - assignTasksRespVO.setAssignTaskInfoList(assignTaskInfoList); | 97 | + //add by 20260307 convert 转换获取任务积分 |
| 98 | + List<Long> taskIds = assignTaskInfoList.stream() | ||
| 99 | + .map(AssignTasksInfoDO::getId) | ||
| 100 | + .distinct() // 去重重复的taskId | ||
| 101 | + .collect(Collectors.toList()); | ||
| 102 | + List<UnitIntegralRespVO> unitIntegralList = unitIntegralService.queryIntegralByRelatedTaskIds(taskIds); | ||
| 103 | + assignTasksRespVO.setAssignTaskInfoList(AssignTaskConvert.INSTANCE.buildTaskInfo(assignTaskInfoList, unitIntegralList)); | ||
| 94 | //获取单位集合 | 104 | //获取单位集合 |
| 95 | List<Long> companyIds = CollectionUtil.isEmpty(assignTaskInfoList) | 105 | List<Long> companyIds = CollectionUtil.isEmpty(assignTaskInfoList) |
| 96 | ? Collections.emptyList() | 106 | ? Collections.emptyList() |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasks/vo/AssignTasksRespVO.java
| @@ -3,8 +3,7 @@ package com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo; | @@ -3,8 +3,7 @@ package com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo; | ||
| 3 | import cn.idev.excel.annotation.ExcelIgnoreUnannotated; | 3 | import cn.idev.excel.annotation.ExcelIgnoreUnannotated; |
| 4 | import cn.idev.excel.annotation.ExcelProperty; | 4 | import cn.idev.excel.annotation.ExcelProperty; |
| 5 | import com.fasterxml.jackson.annotation.JsonFormat; | 5 | import com.fasterxml.jackson.annotation.JsonFormat; |
| 6 | -import com.fhs.core.trans.vo.VO; | ||
| 7 | -import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO; | 6 | +import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoRespVO; |
| 8 | import io.swagger.v3.oas.annotations.media.Schema; | 7 | import io.swagger.v3.oas.annotations.media.Schema; |
| 9 | import lombok.Data; | 8 | import lombok.Data; |
| 10 | 9 | ||
| @@ -12,6 +11,7 @@ import java.util.Date; | @@ -12,6 +11,7 @@ import java.util.Date; | ||
| 12 | import java.util.List; | 11 | import java.util.List; |
| 13 | 12 | ||
| 14 | import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | 13 | import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
| 14 | +import static com.zteits.urbanops.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT; | ||
| 15 | 15 | ||
| 16 | @Schema(description = "管理后台 - 派单任务主表(记录派单任务基本信息) Response VO") | 16 | @Schema(description = "管理后台 - 派单任务主表(记录派单任务基本信息) Response VO") |
| 17 | @Data | 17 | @Data |
| @@ -38,12 +38,12 @@ public class AssignTasksRespVO { | @@ -38,12 +38,12 @@ public class AssignTasksRespVO { | ||
| 38 | 38 | ||
| 39 | @Schema(description = "任务创建时间(派单时间)", requiredMode = Schema.RequiredMode.REQUIRED) | 39 | @Schema(description = "任务创建时间(派单时间)", requiredMode = Schema.RequiredMode.REQUIRED) |
| 40 | @ExcelProperty("派达时间") | 40 | @ExcelProperty("派达时间") |
| 41 | - @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | 41 | + @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT ) |
| 42 | private Date createTime; | 42 | private Date createTime; |
| 43 | 43 | ||
| 44 | @Schema(description = "任务截止时间", requiredMode = Schema.RequiredMode.REQUIRED) | 44 | @Schema(description = "任务截止时间", requiredMode = Schema.RequiredMode.REQUIRED) |
| 45 | @ExcelProperty("任务截止时间") | 45 | @ExcelProperty("任务截止时间") |
| 46 | - @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | 46 | + @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT) |
| 47 | private Date deadline; | 47 | private Date deadline; |
| 48 | 48 | ||
| 49 | @Schema(description = "任务备注(如:特殊要求、注意事项等)") | 49 | @Schema(description = "任务备注(如:特殊要求、注意事项等)") |
| @@ -64,7 +64,7 @@ public class AssignTasksRespVO { | @@ -64,7 +64,7 @@ public class AssignTasksRespVO { | ||
| 64 | private String updater; | 64 | private String updater; |
| 65 | 65 | ||
| 66 | private List<Long> companyIds; | 66 | private List<Long> companyIds; |
| 67 | - private List<AssignTasksInfoDO> assignTaskInfoList; | 67 | + private List<AssignTasksInfoRespVO> assignTaskInfoList; |
| 68 | 68 | ||
| 69 | public void setParentFinish(Integer parentFinish) { | 69 | public void setParentFinish(Integer parentFinish) { |
| 70 | this.parentFinish = parentFinish; | 70 | this.parentFinish = parentFinish; |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasks/vo/AssignTasksSaveReqVO.java
| @@ -43,7 +43,11 @@ public class AssignTasksSaveReqVO { | @@ -43,7 +43,11 @@ public class AssignTasksSaveReqVO { | ||
| 43 | private Integer parentFinish; | 43 | private Integer parentFinish; |
| 44 | 44 | ||
| 45 | @Schema(description = "整体完成时间(仅当parent_finish=1时有值)") | 45 | @Schema(description = "整体完成时间(仅当parent_finish=1时有值)") |
| 46 | - @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | 46 | + @JsonFormat( |
| 47 | + pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, | ||
| 48 | + timezone = "GMT+8", | ||
| 49 | + shape = JsonFormat.Shape.STRING | ||
| 50 | + ) | ||
| 47 | private Date finishTime; | 51 | private Date finishTime; |
| 48 | 52 | ||
| 49 | @Schema(description = "任务备注(如:特殊要求、注意事项等)") | 53 | @Schema(description = "任务备注(如:特殊要求、注意事项等)") |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/AssignTasksInfoController.java
| @@ -10,11 +10,14 @@ import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.Ass | @@ -10,11 +10,14 @@ import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.Ass | ||
| 10 | import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoRespVO; | 10 | import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoRespVO; |
| 11 | import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoSaveReqVO; | 11 | import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoSaveReqVO; |
| 12 | import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoUpdReqVO; | 12 | import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoUpdReqVO; |
| 13 | +import com.zteits.urbanops.module.garden.controller.admin.unitintegraltotal.vo.UnitIntegralRespVO; | ||
| 13 | import com.zteits.urbanops.module.garden.convert.AssignTaskConvert; | 14 | import com.zteits.urbanops.module.garden.convert.AssignTaskConvert; |
| 14 | import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO; | 15 | import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO; |
| 15 | import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO; | 16 | import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO; |
| 16 | import com.zteits.urbanops.module.garden.service.assigntasks.AssignTasksService; | 17 | import com.zteits.urbanops.module.garden.service.assigntasks.AssignTasksService; |
| 17 | import com.zteits.urbanops.module.garden.service.assigntasksinfo.AssignTasksInfoService; | 18 | import com.zteits.urbanops.module.garden.service.assigntasksinfo.AssignTasksInfoService; |
| 19 | +import com.zteits.urbanops.module.garden.service.assigntasksinfo.QuartzRemindService; | ||
| 20 | +import com.zteits.urbanops.module.garden.service.unitintegraltotal.UnitIntegralService; | ||
| 18 | import io.swagger.v3.oas.annotations.Operation; | 21 | import io.swagger.v3.oas.annotations.Operation; |
| 19 | import io.swagger.v3.oas.annotations.Parameter; | 22 | import io.swagger.v3.oas.annotations.Parameter; |
| 20 | import io.swagger.v3.oas.annotations.tags.Tag; | 23 | import io.swagger.v3.oas.annotations.tags.Tag; |
| @@ -26,7 +29,12 @@ import org.springframework.validation.annotation.Validated; | @@ -26,7 +29,12 @@ import org.springframework.validation.annotation.Validated; | ||
| 26 | import org.springframework.web.bind.annotation.*; | 29 | import org.springframework.web.bind.annotation.*; |
| 27 | 30 | ||
| 28 | import java.io.IOException; | 31 | import java.io.IOException; |
| 32 | +import java.time.LocalDateTime; | ||
| 33 | +import java.time.ZoneId; | ||
| 34 | +import java.util.ArrayList; | ||
| 35 | +import java.util.Date; | ||
| 29 | import java.util.List; | 36 | import java.util.List; |
| 37 | +import java.util.stream.Collectors; | ||
| 30 | 38 | ||
| 31 | import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.EXPORT; | 39 | import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| 32 | import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; | 40 | import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; |
| @@ -42,6 +50,8 @@ public class AssignTasksInfoController { | @@ -42,6 +50,8 @@ public class AssignTasksInfoController { | ||
| 42 | private AssignTasksInfoService assignTasksInfoService; | 50 | private AssignTasksInfoService assignTasksInfoService; |
| 43 | @Resource | 51 | @Resource |
| 44 | private AssignTasksService assignTasksService; | 52 | private AssignTasksService assignTasksService; |
| 53 | + @Resource | ||
| 54 | + private UnitIntegralService unitIntegralService; | ||
| 45 | 55 | ||
| 46 | @PostMapping("/create") | 56 | @PostMapping("/create") |
| 47 | @Operation(summary = "创建派单任务-单位关联表(记录单位接收派单后的执行详情)") | 57 | @Operation(summary = "创建派单任务-单位关联表(记录单位接收派单后的执行详情)") |
| @@ -83,7 +93,11 @@ public class AssignTasksInfoController { | @@ -83,7 +93,11 @@ public class AssignTasksInfoController { | ||
| 83 | public CommonResult<AssignTasksInfoRespVO> getAssignTasksInfo(@RequestParam("id") Long id) { | 93 | public CommonResult<AssignTasksInfoRespVO> getAssignTasksInfo(@RequestParam("id") Long id) { |
| 84 | AssignTasksInfoDO assignTasksInfo = assignTasksInfoService.getAssignTasksInfo(id); | 94 | AssignTasksInfoDO assignTasksInfo = assignTasksInfoService.getAssignTasksInfo(id); |
| 85 | AssignTasksDO tasksDO = assignTasksService.getAssignTasks(assignTasksInfo.getTaskId()); | 95 | AssignTasksDO tasksDO = assignTasksService.getAssignTasks(assignTasksInfo.getTaskId()); |
| 86 | - return success(AssignTaskConvert.INSTANCE.buildTask(assignTasksInfo, tasksDO)); | 96 | + //add by 20260307 convert 转换获取任务积分 |
| 97 | + List<Long> taskIds = new ArrayList<>(); | ||
| 98 | + taskIds.add(assignTasksInfo.getId()); | ||
| 99 | + List<UnitIntegralRespVO> unitIntegralList = unitIntegralService.queryIntegralByRelatedTaskIds(taskIds); | ||
| 100 | + return success(AssignTaskConvert.INSTANCE.buildTask(assignTasksInfo, tasksDO, unitIntegralList)); | ||
| 87 | //return success(BeanUtils.toBean(assignTasksInfo, AssignTasksInfoRespVO.class)); | 101 | //return success(BeanUtils.toBean(assignTasksInfo, AssignTasksInfoRespVO.class)); |
| 88 | } | 102 | } |
| 89 | 103 | ||
| @@ -93,26 +107,16 @@ public class AssignTasksInfoController { | @@ -93,26 +107,16 @@ public class AssignTasksInfoController { | ||
| 93 | public CommonResult<PageResult<AssignTasksInfoRespVO>> getAssignTasksInfoPage(@Valid AssignTasksInfoPageReqVO pageReqVO) { | 107 | public CommonResult<PageResult<AssignTasksInfoRespVO>> getAssignTasksInfoPage(@Valid AssignTasksInfoPageReqVO pageReqVO) { |
| 94 | pageReqVO.setCompanyId(getCompanyId()); | 108 | pageReqVO.setCompanyId(getCompanyId()); |
| 95 | PageResult<AssignTasksInfoDO> pageResult = assignTasksInfoService.getAssignTasksInfoPage(pageReqVO); | 109 | PageResult<AssignTasksInfoDO> pageResult = assignTasksInfoService.getAssignTasksInfoPage(pageReqVO); |
| 96 | -// if (pageResult == null || pageResult.getList() == null || pageResult.getList().isEmpty()) { | ||
| 97 | -// return success(BeanUtils.toBean(pageResult, AssignTasksInfoRespVO.class)); | ||
| 98 | -// } | ||
| 99 | -// List<Long> assignIds = pageResult.getList().stream() | ||
| 100 | -// .map(AssignTasksInfoDO::getTaskId) | ||
| 101 | -// .distinct() | ||
| 102 | -// .collect(Collectors.toList()); | ||
| 103 | -// List<AssignTasksDO> taskList = assignTasksService.getAssignTasksList(assignIds); | ||
| 104 | -// if (CollectionUtils.isNotEmpty(taskList)) { | ||
| 105 | -// Map<Long, AssignTasksDO> taskMap = taskList.stream() | ||
| 106 | -// .collect(Collectors.toMap( | ||
| 107 | -// AssignTasksDO::getId, // Key:任务ID | ||
| 108 | -// task -> task, | ||
| 109 | -// (existing, replacement) -> replacement | ||
| 110 | -// )); | ||
| 111 | -// return success(AssignTaskConvert.INSTANCE.buildTaskPage(pageResult, taskMap)); | ||
| 112 | -// } else { | ||
| 113 | -// return CommonResult.error(BAD_REQUEST.getCode(), "派单数据异常"); | ||
| 114 | -// } | ||
| 115 | - return success(BeanUtils.toBean(pageResult, AssignTasksInfoRespVO.class)); | 110 | + if (pageResult == null || pageResult.getList() == null || pageResult.getList().isEmpty()) { |
| 111 | + return success(BeanUtils.toBean(pageResult, AssignTasksInfoRespVO.class)); | ||
| 112 | + } | ||
| 113 | + //add by 20260307 convert 转换获取任务积分 | ||
| 114 | + List<Long> taskIds = pageResult.getList().stream() | ||
| 115 | + .map(AssignTasksInfoDO::getId) | ||
| 116 | + .distinct() // 去重重复的taskId | ||
| 117 | + .collect(Collectors.toList()); | ||
| 118 | + List<UnitIntegralRespVO> unitIntegralList = unitIntegralService.queryIntegralByRelatedTaskIds(taskIds); | ||
| 119 | + return success(AssignTaskConvert.INSTANCE.buildTaskPage(pageResult, unitIntegralList)); | ||
| 116 | } | 120 | } |
| 117 | @GetMapping("/list") | 121 | @GetMapping("/list") |
| 118 | @Operation(summary = "获得派单任务-单位关联表(记录单位接收派单后的执行详情)分页") | 122 | @Operation(summary = "获得派单任务-单位关联表(记录单位接收派单后的执行详情)分页") |
| @@ -120,26 +124,13 @@ public class AssignTasksInfoController { | @@ -120,26 +124,13 @@ public class AssignTasksInfoController { | ||
| 120 | public CommonResult<PageResult<AssignTasksInfoRespVO>> list(@Valid AssignTasksInfoPageReqVO pageReqVO) { | 124 | public CommonResult<PageResult<AssignTasksInfoRespVO>> list(@Valid AssignTasksInfoPageReqVO pageReqVO) { |
| 121 | pageReqVO.setCompanyId(getCompanyId()); | 125 | pageReqVO.setCompanyId(getCompanyId()); |
| 122 | PageResult<AssignTasksInfoDO> pageResult = assignTasksInfoService.getAssignTasksInfoPage(pageReqVO); | 126 | PageResult<AssignTasksInfoDO> pageResult = assignTasksInfoService.getAssignTasksInfoPage(pageReqVO); |
| 123 | -// if (pageResult == null || pageResult.getList() == null || pageResult.getList().isEmpty()) { | ||
| 124 | -// return success(BeanUtils.toBean(pageResult, AssignTasksInfoRespVO.class)); | ||
| 125 | -// } | ||
| 126 | -// List<Long> assignIds = pageResult.getList().stream() | ||
| 127 | -// .map(AssignTasksInfoDO::getTaskId) | ||
| 128 | -// .distinct() | ||
| 129 | -// .collect(Collectors.toList()); | ||
| 130 | -// List<AssignTasksDO> taskList = assignTasksService.getAssignTasksList(assignIds); | ||
| 131 | -// if (CollectionUtils.isNotEmpty(taskList)) { | ||
| 132 | -// Map<Long, AssignTasksDO> taskMap = taskList.stream() | ||
| 133 | -// .collect(Collectors.toMap( | ||
| 134 | -// AssignTasksDO::getId, // Key:任务ID | ||
| 135 | -// task -> task, | ||
| 136 | -// (existing, replacement) -> replacement | ||
| 137 | -// )); | ||
| 138 | -// return success(AssignTaskConvert.INSTANCE.buildTaskPage(pageResult, taskMap)); | ||
| 139 | -// } else { | ||
| 140 | -// return CommonResult.error(BAD_REQUEST.getCode(), "派单数据异常"); | ||
| 141 | -// } | ||
| 142 | - return success(BeanUtils.toBean(pageResult, AssignTasksInfoRespVO.class)); | 127 | + //add by 20260307 convert 转换获取任务积分 |
| 128 | + List<Long> taskIds = pageResult.getList().stream() | ||
| 129 | + .map(AssignTasksInfoDO::getId) | ||
| 130 | + .distinct() // 去重重复的taskId | ||
| 131 | + .collect(Collectors.toList()); | ||
| 132 | + List<UnitIntegralRespVO> unitIntegralList = unitIntegralService.queryIntegralByRelatedTaskIds(taskIds); | ||
| 133 | + return success(AssignTaskConvert.INSTANCE.buildTaskPage(pageResult, unitIntegralList)); | ||
| 143 | } | 134 | } |
| 144 | @GetMapping("/export-excel") | 135 | @GetMapping("/export-excel") |
| 145 | @Operation(summary = "导出派单任务-单位关联表(记录单位接收派单后的执行详情) Excel") | 136 | @Operation(summary = "导出派单任务-单位关联表(记录单位接收派单后的执行详情) Excel") |
| @@ -179,4 +170,28 @@ public class AssignTasksInfoController { | @@ -179,4 +170,28 @@ public class AssignTasksInfoController { | ||
| 179 | public CommonResult feedback(@RequestBody AssignTasksInfoUpdReqVO assignTaskCompany) { | 170 | public CommonResult feedback(@RequestBody AssignTasksInfoUpdReqVO assignTaskCompany) { |
| 180 | return success(assignTasksInfoService.feedbackAssignTaskCompany(assignTaskCompany)); | 171 | return success(assignTasksInfoService.feedbackAssignTaskCompany(assignTaskCompany)); |
| 181 | } | 172 | } |
| 173 | + | ||
| 174 | + | ||
| 175 | + @Resource | ||
| 176 | + private QuartzRemindService quartzRemindService; | ||
| 177 | + | ||
| 178 | + @Operation(summary = "到期提醒") | ||
| 179 | + @GetMapping(value = "/createDeadlineRemind") | ||
| 180 | + public void deadlineRemindTest(@RequestParam("id") Long id) { | ||
| 181 | + // 2. 注册Quartz任务:到期前3小时触发 | ||
| 182 | + try { | ||
| 183 | + LocalDateTime now = LocalDateTime.now(); | ||
| 184 | + LocalDateTime triggerTime = now.plusHours(3).plusMinutes(3); // 现在往后推3小时3分钟 | ||
| 185 | + Date triggerDate = Date.from( | ||
| 186 | + triggerTime.atZone(ZoneId.systemDefault()) // 绑定时区 | ||
| 187 | + .toInstant() // 转为Instant(含时区的时间戳) | ||
| 188 | + ); | ||
| 189 | + //quartzRemindService.registerRemindJob(id, triggerDate); | ||
| 190 | + | ||
| 191 | + unitIntegralService.resetUnitIntegralTotal(); | ||
| 192 | + } catch (Exception e) { | ||
| 193 | + throw new RuntimeException("任务创建失败"); | ||
| 194 | + } | ||
| 195 | + } | ||
| 196 | + | ||
| 182 | } | 197 | } |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/vo/AssignTasksInfoRespVO.java
| @@ -139,4 +139,9 @@ public class AssignTasksInfoRespVO { | @@ -139,4 +139,9 @@ public class AssignTasksInfoRespVO { | ||
| 139 | @TableField(typeHandler = JacksonTypeHandler.class) | 139 | @TableField(typeHandler = JacksonTypeHandler.class) |
| 140 | private List templateFile; | 140 | private List templateFile; |
| 141 | 141 | ||
| 142 | + | ||
| 143 | + /*当前积分*/ | ||
| 144 | + private Integer totalIntegral; | ||
| 145 | + | ||
| 146 | + | ||
| 142 | } | 147 | } |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/costfee/CostFeeController.java
| @@ -5,16 +5,24 @@ import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; | @@ -5,16 +5,24 @@ import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; | ||
| 5 | import com.zteits.urbanops.module.garden.controller.admin.costfee.vo.WaterFeeImport; | 5 | import com.zteits.urbanops.module.garden.controller.admin.costfee.vo.WaterFeeImport; |
| 6 | import com.zteits.urbanops.module.garden.enums.TemplateEnum; | 6 | import com.zteits.urbanops.module.garden.enums.TemplateEnum; |
| 7 | import com.zteits.urbanops.module.garden.service.costfee.CostFeeService; | 7 | import com.zteits.urbanops.module.garden.service.costfee.CostFeeService; |
| 8 | +import com.zteits.urbanops.module.system.api.dept.DeptApi; | ||
| 9 | +import com.zteits.urbanops.module.system.api.dept.dto.DeptRespDTO; | ||
| 8 | import io.swagger.v3.oas.annotations.Operation; | 10 | import io.swagger.v3.oas.annotations.Operation; |
| 9 | import io.swagger.v3.oas.annotations.tags.Tag; | 11 | import io.swagger.v3.oas.annotations.tags.Tag; |
| 12 | +import jakarta.annotation.security.PermitAll; | ||
| 10 | import jakarta.servlet.http.HttpServletResponse; | 13 | import jakarta.servlet.http.HttpServletResponse; |
| 11 | import lombok.AllArgsConstructor; | 14 | import lombok.AllArgsConstructor; |
| 12 | import lombok.Data; | 15 | import lombok.Data; |
| 13 | import lombok.extern.slf4j.Slf4j; | 16 | import lombok.extern.slf4j.Slf4j; |
| 17 | +import org.apache.poi.ss.usermodel.*; | ||
| 18 | +import org.apache.poi.ss.util.CellRangeAddressList; | ||
| 19 | +import org.apache.poi.xssf.usermodel.XSSFWorkbook; | ||
| 14 | import org.springframework.beans.factory.annotation.Autowired; | 20 | import org.springframework.beans.factory.annotation.Autowired; |
| 15 | import org.springframework.beans.factory.annotation.Value; | 21 | import org.springframework.beans.factory.annotation.Value; |
| 16 | -import org.springframework.core.io.ClassPathResource; | 22 | +import org.springframework.core.io.Resource; |
| 23 | +import org.springframework.core.io.ResourceLoader; | ||
| 17 | import org.springframework.util.CollectionUtils; | 24 | import org.springframework.util.CollectionUtils; |
| 25 | +import org.springframework.util.StringUtils; | ||
| 18 | import org.springframework.web.bind.annotation.*; | 26 | import org.springframework.web.bind.annotation.*; |
| 19 | import org.springframework.web.multipart.MultipartFile; | 27 | import org.springframework.web.multipart.MultipartFile; |
| 20 | 28 | ||
| @@ -23,7 +31,6 @@ import java.io.InputStream; | @@ -23,7 +31,6 @@ import java.io.InputStream; | ||
| 23 | import java.io.OutputStream; | 31 | import java.io.OutputStream; |
| 24 | import java.lang.reflect.Method; | 32 | import java.lang.reflect.Method; |
| 25 | import java.net.URLEncoder; | 33 | import java.net.URLEncoder; |
| 26 | -import java.nio.charset.StandardCharsets; | ||
| 27 | import java.util.*; | 34 | import java.util.*; |
| 28 | 35 | ||
| 29 | import static com.zteits.urbanops.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST; | 36 | import static com.zteits.urbanops.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST; |
| @@ -49,6 +56,12 @@ public class CostFeeController{ | @@ -49,6 +56,12 @@ public class CostFeeController{ | ||
| 49 | @Value("${static.resource.server.enable}") | 56 | @Value("${static.resource.server.enable}") |
| 50 | private Boolean staticResourceServerenable; | 57 | private Boolean staticResourceServerenable; |
| 51 | 58 | ||
| 59 | + @Autowired | ||
| 60 | + private ResourceLoader resourceLoader; | ||
| 61 | + | ||
| 62 | + @jakarta.annotation.Resource | ||
| 63 | + private DeptApi deptApi; | ||
| 64 | + | ||
| 52 | // Excel文件校验相关 | 65 | // Excel文件校验相关 |
| 53 | private static final List<String> ALLOWED_EXCEL_SUFFIX = Arrays.asList(".xlsx", ".xlsm"); | 66 | private static final List<String> ALLOWED_EXCEL_SUFFIX = Arrays.asList(".xlsx", ".xlsm"); |
| 54 | private static final String EXCEL_MIME_TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; | 67 | private static final String EXCEL_MIME_TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; |
| @@ -59,6 +72,7 @@ public class CostFeeController{ | @@ -59,6 +72,7 @@ public class CostFeeController{ | ||
| 59 | */ | 72 | */ |
| 60 | @GetMapping("/get-import-template") | 73 | @GetMapping("/get-import-template") |
| 61 | @Operation(summary = "获得导入用户模板") | 74 | @Operation(summary = "获得导入用户模板") |
| 75 | + @PermitAll | ||
| 62 | public void importTemplate(HttpServletResponse response, | 76 | public void importTemplate(HttpServletResponse response, |
| 63 | @RequestParam("templateName") String templateName) throws IOException { | 77 | @RequestParam("templateName") String templateName) throws IOException { |
| 64 | // 参数校验 | 78 | // 参数校验 |
| @@ -74,29 +88,150 @@ public class CostFeeController{ | @@ -74,29 +88,150 @@ public class CostFeeController{ | ||
| 74 | return; | 88 | return; |
| 75 | } | 89 | } |
| 76 | 90 | ||
| 77 | - if (staticResourceServerenable) { | ||
| 78 | - // 构建完整的静态服务器URL(确保路径正确) | ||
| 79 | - String serverUrl = staticResourceServerUrl; | ||
| 80 | - if (serverUrl != null && !serverUrl.endsWith("/")) { | ||
| 81 | - serverUrl += "/"; // 确保URL以/结尾,避免拼接错误 | ||
| 82 | - } | 91 | + writeAndModifyTemplate(response, template.getName(), template.getStartIndex()); |
| 92 | + } | ||
| 93 | + | ||
| 94 | + private void writeAndModifyTemplate(HttpServletResponse response, | ||
| 95 | + String downloadFileName, | ||
| 96 | + int startIndexRow) throws IOException { | ||
| 97 | + | ||
| 98 | + // 拼接模板路径 | ||
| 99 | + String serverUrl = staticResourceServerUrl; | ||
| 100 | + if (serverUrl != null && !serverUrl.endsWith("/")) { | ||
| 101 | + serverUrl += "/"; | ||
| 102 | + } | ||
| 103 | + String fullPath = serverUrl + downloadFileName; | ||
| 104 | + fullPath = fullPath.replace("\\", "/"); | ||
| 105 | + | ||
| 106 | + Resource resource = resourceLoader.getResource(fullPath); | ||
| 107 | + | ||
| 108 | + // 检查文件是否存在 | ||
| 109 | + if (!resource.exists()) { | ||
| 110 | + response.sendError(HttpServletResponse.SC_NOT_FOUND, "模板文件不存在"); | ||
| 111 | + return; | ||
| 112 | + } | ||
| 113 | + | ||
| 114 | + // 设置下载响应头 | ||
| 115 | + response.reset(); | ||
| 116 | + response.setContentType(EXCEL_MIME_TYPE); | ||
| 117 | + // response.setCharacterEncoding("UTF-8"); | ||
| 118 | + String encodedName = URLEncoder.encode(downloadFileName, "UTF-8"); | ||
| 119 | + // 标准文件名编码(Chrome / Edge / Firefox 全兼容) | ||
| 120 | + response.setHeader("Content-Disposition", "attachment;filename*=UTF-8''" + encodedName); | ||
| 121 | + // 浏览器缓存配置(必须) | ||
| 122 | + response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); | ||
| 123 | + response.setHeader("Pragma", "no-cache"); | ||
| 124 | + response.setHeader("Expires", "0"); | ||
| 125 | + | ||
| 126 | + | ||
| 127 | + try (InputStream in = resource.getInputStream(); | ||
| 128 | + XSSFWorkbook workbook = new XSSFWorkbook(in); | ||
| 129 | + OutputStream out = response.getOutputStream()) { | ||
| 83 | 130 | ||
| 84 | - String encodedFileName = URLEncoder.encode(template.getName().split("\\.")[0], StandardCharsets.UTF_8.name()); | 131 | + Sheet sheet = workbook.getSheetAt(0); |
| 85 | 132 | ||
| 86 | - String templateFileName = encodedFileName + "." + template.getName().split("\\.")[1]; | 133 | + // ============================================== |
| 134 | + // 获取最新单位列表 | ||
| 135 | + // ============================================== | ||
| 136 | + List<DeptRespDTO> companyList = deptApi.getSubDeptList(); | ||
| 137 | + List<String> newUnits = companyList.stream() | ||
| 138 | + .map(DeptRespDTO::getName) | ||
| 139 | + .filter(Objects::nonNull) | ||
| 140 | + .toList(); | ||
| 87 | 141 | ||
| 88 | - String templateUrl = serverUrl + templateFileName; // 包含templates目录 | 142 | + log.info("加载到单位列表:{},共{}条", newUnits, newUnits.size()); |
| 89 | 143 | ||
| 90 | - // 方式1:重定向到静态资源服务器 | ||
| 91 | - response.sendRedirect(templateUrl); | ||
| 92 | - } else { | ||
| 93 | - String templateFileName = templateName + "." + template.getName().split("\\.")[1]; | 144 | + // ============================================== |
| 145 | + // 生成新下拉 + 自动赋值 | ||
| 146 | + // ============================================== | ||
| 147 | + createDropdownAndSetValue(sheet, newUnits, startIndexRow); | ||
| 148 | + | ||
| 149 | + // 写入并强制刷新 | ||
| 150 | + workbook.write(out); | ||
| 151 | + out.flush(); | ||
| 94 | 152 | ||
| 95 | - // 写入模板文件到响应 | ||
| 96 | - writeTemplateToResponse(response, template.getName(), templateFileName); | 153 | + } catch (Exception e) { |
| 154 | + log.error("模板处理失败", e); | ||
| 155 | + throw new IOException("文件处理失败", e); | ||
| 97 | } | 156 | } |
| 98 | } | 157 | } |
| 99 | 158 | ||
| 159 | + /** | ||
| 160 | + * 创建下拉框 + 给单元格赋值 | ||
| 161 | + */ | ||
| 162 | + private void createDropdownAndSetValue(Sheet sheet, List<String> options, int startRow) { | ||
| 163 | + if (options.isEmpty()) { | ||
| 164 | + log.error("下拉选项为空,不创建"); | ||
| 165 | + return; | ||
| 166 | + } | ||
| 167 | + | ||
| 168 | + // 获取表头行 | ||
| 169 | + Row headerRow = sheet.getRow(startRow - 1); | ||
| 170 | + if (headerRow == null) { | ||
| 171 | + log.error("表头行不存在:{}", startRow - 1); | ||
| 172 | + return; | ||
| 173 | + } | ||
| 174 | + | ||
| 175 | + // 查找“所属单位”列 | ||
| 176 | + int targetCol = -1; | ||
| 177 | + for (Cell cell : headerRow) { | ||
| 178 | + if (cell != null && cell.getCellType() == CellType.STRING) { | ||
| 179 | + String val = cell.getStringCellValue().trim(); | ||
| 180 | + if (val.contains("所属单位") || val.contains("所属公司") ) { | ||
| 181 | + targetCol = cell.getColumnIndex(); | ||
| 182 | + break; | ||
| 183 | + } | ||
| 184 | + } | ||
| 185 | + } | ||
| 186 | + | ||
| 187 | + if (targetCol == -1) { | ||
| 188 | + log.error("未找到【所属单位】列表头"); | ||
| 189 | + return; | ||
| 190 | + } | ||
| 191 | + | ||
| 192 | + // 取消列隐藏 | ||
| 193 | + sheet.setColumnHidden(targetCol, false); | ||
| 194 | + | ||
| 195 | + // ============================================== | ||
| 196 | + // 遍历行:清空原有内容 + 设置默认值 | ||
| 197 | + // ============================================== | ||
| 198 | + int endRow = 100; | ||
| 199 | + for (int r = startRow; r <= endRow; r++) { | ||
| 200 | + Row row = sheet.getRow(r); | ||
| 201 | + if (row == null) { | ||
| 202 | + row = sheet.createRow(r); | ||
| 203 | + } | ||
| 204 | + | ||
| 205 | + Cell cell = row.getCell(targetCol); | ||
| 206 | + if (cell == null) { | ||
| 207 | + cell = row.createCell(targetCol); | ||
| 208 | + } | ||
| 209 | + String unit = cell.getStringCellValue(); | ||
| 210 | + // 默认赋值【第一个单位】,你可以根据业务改成其他值 | ||
| 211 | + if (!StringUtils.isEmpty(unit)) { | ||
| 212 | + cell.setCellValue(options.get(0)); | ||
| 213 | + } | ||
| 214 | + } | ||
| 215 | + | ||
| 216 | + // ============================================== | ||
| 217 | + // 创建下拉框(作用范围:startRow ~ 1000行) | ||
| 218 | + // ============================================== | ||
| 219 | + CellRangeAddressList regions = new CellRangeAddressList(startRow, endRow, targetCol, targetCol); | ||
| 220 | + DataValidationHelper helper = sheet.getDataValidationHelper(); | ||
| 221 | + DataValidationConstraint constraint = helper.createExplicitListConstraint( | ||
| 222 | + options.toArray(new String[0]) | ||
| 223 | + ); | ||
| 224 | + DataValidation validation = helper.createValidation(constraint, regions); | ||
| 225 | + // 下拉框基础配置 | ||
| 226 | + validation.setEmptyCellAllowed(true); | ||
| 227 | + validation.setSuppressDropDownArrow(true); // 显示箭头 | ||
| 228 | + validation.setShowErrorBox(true); | ||
| 229 | + validation.setShowPromptBox(true); // 启用点击弹出提示 | ||
| 230 | + sheet.addValidationData(validation); | ||
| 231 | + | ||
| 232 | + log.info("【成功】为列{}添加下拉并赋值,行{}~{},选项数:{}", | ||
| 233 | + targetCol, startRow, endRow, options.size()); | ||
| 234 | + } | ||
| 100 | 235 | ||
| 101 | /** | 236 | /** |
| 102 | * Excel文件上传预览 | 237 | * Excel文件上传预览 |
| @@ -214,31 +349,6 @@ public class CostFeeController{ | @@ -214,31 +349,6 @@ public class CostFeeController{ | ||
| 214 | } | 349 | } |
| 215 | 350 | ||
| 216 | /** | 351 | /** |
| 217 | - * 写入模板文件到响应流 | ||
| 218 | - */ | ||
| 219 | - private void writeTemplateToResponse(HttpServletResponse response, String filename, String templatePath) throws IOException { | ||
| 220 | - // 设置响应头 | ||
| 221 | - response.setContentType(EXCEL_MIME_TYPE); | ||
| 222 | - response.setCharacterEncoding("UTF-8"); | ||
| 223 | - String encodedFileName = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20"); | ||
| 224 | - response.setHeader("Content-Disposition", "attachment;filename=" + encodedFileName); | ||
| 225 | - response.setHeader("Cache-Control", "no-store"); // 禁止缓存 | ||
| 226 | - | ||
| 227 | - // 读取模板文件并写入响应 | ||
| 228 | - try (InputStream in = new ClassPathResource("template/" + templatePath).getInputStream(); | ||
| 229 | - OutputStream out = response.getOutputStream()) { | ||
| 230 | - | ||
| 231 | - byte[] buffer = new byte[4096]; | ||
| 232 | - int bytesRead; | ||
| 233 | - while ((bytesRead = in.read(buffer)) != -1) { | ||
| 234 | - out.write(buffer, 0, bytesRead); | ||
| 235 | - } | ||
| 236 | - out.flush(); | ||
| 237 | - } | ||
| 238 | - } | ||
| 239 | - | ||
| 240 | - | ||
| 241 | - /** | ||
| 242 | * 校验Excel文件有效性(后缀+MIME类型) | 352 | * 校验Excel文件有效性(后缀+MIME类型) |
| 243 | */ | 353 | */ |
| 244 | private boolean isValidExcelFile(MultipartFile file) { | 354 | private boolean isValidExcelFile(MultipartFile file) { |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/costfee/vo/MaterialInventoryInImport.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.costfee.vo; | ||
| 2 | + | ||
| 3 | +import cn.idev.excel.annotation.ExcelProperty; | ||
| 4 | +import com.fasterxml.jackson.annotation.JsonFormat; | ||
| 5 | +import jakarta.validation.constraints.NotEmpty; | ||
| 6 | +import jakarta.validation.constraints.NotNull; | ||
| 7 | +import jakarta.validation.constraints.Positive; | ||
| 8 | +import lombok.AllArgsConstructor; | ||
| 9 | +import lombok.Builder; | ||
| 10 | +import lombok.Data; | ||
| 11 | +import lombok.NoArgsConstructor; | ||
| 12 | + | ||
| 13 | +import java.math.BigDecimal; | ||
| 14 | +import java.time.LocalDate; | ||
| 15 | + | ||
| 16 | +/** | ||
| 17 | + * @Classname MaterialInventoryInImport | ||
| 18 | + * @Description 物料批量入库 | ||
| 19 | + * @Date 2026/1/15 22:22 | ||
| 20 | + * @Created by wangqian | ||
| 21 | + */ | ||
| 22 | +@Data | ||
| 23 | +@Builder | ||
| 24 | +@AllArgsConstructor | ||
| 25 | +@NoArgsConstructor | ||
| 26 | +public class MaterialInventoryInImport { | ||
| 27 | + | ||
| 28 | + | ||
| 29 | + @ExcelProperty(index = 1) | ||
| 30 | + @NotEmpty(message = "物料名称不能为空") | ||
| 31 | + private String materialName; | ||
| 32 | + | ||
| 33 | + @NotEmpty(message = "耗材类型不能为空") | ||
| 34 | + @ExcelProperty(index = 2) | ||
| 35 | + private String materialTypeName; | ||
| 36 | + | ||
| 37 | + @NotEmpty(message = "类别名称不能为空") | ||
| 38 | + @ExcelProperty(index = 3) | ||
| 39 | + private String typeName; | ||
| 40 | + | ||
| 41 | + | ||
| 42 | + @NotEmpty(message = "类别明细不能为空") | ||
| 43 | + @ExcelProperty(index = 4) | ||
| 44 | + private String typeDetailName; | ||
| 45 | + | ||
| 46 | + @NotEmpty(message = "物料规格不能为空") | ||
| 47 | + @ExcelProperty(index = 5) | ||
| 48 | + private String specifications; | ||
| 49 | + | ||
| 50 | + @NotEmpty(message = "物料单位不能为空") | ||
| 51 | + @ExcelProperty(index = 6) | ||
| 52 | + private String unitName; | ||
| 53 | + | ||
| 54 | + @NotNull(message = "单价不能为空") | ||
| 55 | + @ExcelProperty(index = 7) | ||
| 56 | + private BigDecimal materialPrice; | ||
| 57 | + | ||
| 58 | + @NotNull(message = "入库数量不能为空") | ||
| 59 | + @ExcelProperty(index = 8) | ||
| 60 | + @Positive(message = "数量必须为正整数") | ||
| 61 | + private Long inInventoryNum; | ||
| 62 | + | ||
| 63 | + @NotNull(message = "采购日期不能为空") | ||
| 64 | + @ExcelProperty(index = 9) | ||
| 65 | + @JsonFormat(pattern = "yyyy-MM-dd") | ||
| 66 | + private LocalDate buyDate; | ||
| 67 | + | ||
| 68 | + @NotEmpty(message = "供应商名称不能为空") | ||
| 69 | + @ExcelProperty(index = 10) | ||
| 70 | + private String supplierName; | ||
| 71 | + | ||
| 72 | + @NotEmpty(message = "联系人不能为空") | ||
| 73 | + @ExcelProperty(index = 11) | ||
| 74 | + private String contactsName; | ||
| 75 | + | ||
| 76 | + @NotEmpty(message = "联系电话不能为空") | ||
| 77 | + @ExcelProperty(index = 12) | ||
| 78 | + private String contactsPhone; | ||
| 79 | + | ||
| 80 | + @NotEmpty(message = "归属公司不能为空") | ||
| 81 | + @ExcelProperty(index = 13) | ||
| 82 | + private String belongCompanyName; | ||
| 83 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/costfee/vo/MaterialInventoryOutImport.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.costfee.vo; | ||
| 2 | + | ||
| 3 | +import cn.idev.excel.annotation.ExcelProperty; | ||
| 4 | +import com.fasterxml.jackson.annotation.JsonFormat; | ||
| 5 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 6 | +import jakarta.validation.constraints.NotEmpty; | ||
| 7 | +import jakarta.validation.constraints.NotNull; | ||
| 8 | +import jakarta.validation.constraints.Positive; | ||
| 9 | +import lombok.AllArgsConstructor; | ||
| 10 | +import lombok.Builder; | ||
| 11 | +import lombok.Data; | ||
| 12 | +import lombok.NoArgsConstructor; | ||
| 13 | + | ||
| 14 | +import java.math.BigDecimal; | ||
| 15 | +import java.time.LocalDate; | ||
| 16 | +import java.time.LocalDateTime; | ||
| 17 | + | ||
| 18 | +/** | ||
| 19 | + * @Classname MaterialInventoryOutImport | ||
| 20 | + * @Description 物料批量出库 | ||
| 21 | + * @Date 2026/1/15 22:22 | ||
| 22 | + * @Created by wangqian | ||
| 23 | + */ | ||
| 24 | +@Data | ||
| 25 | +@Builder | ||
| 26 | +@AllArgsConstructor | ||
| 27 | +@NoArgsConstructor | ||
| 28 | +public class MaterialInventoryOutImport { | ||
| 29 | + | ||
| 30 | + | ||
| 31 | + | ||
| 32 | + @ExcelProperty(index = 1) | ||
| 33 | + @NotEmpty(message = "物料名称不能为空") | ||
| 34 | + private String materialName; | ||
| 35 | + | ||
| 36 | + @NotEmpty(message = "耗材类型不能为空") | ||
| 37 | + @ExcelProperty(index = 2) | ||
| 38 | + private String materialTypeName; | ||
| 39 | + | ||
| 40 | + @NotEmpty(message = "类别名称不能为空") | ||
| 41 | + @ExcelProperty(index = 3) | ||
| 42 | + private String typeName; | ||
| 43 | + | ||
| 44 | + @NotEmpty(message = "类别明细不能为空") | ||
| 45 | + @ExcelProperty(index = 4) | ||
| 46 | + private String typeDetailName; | ||
| 47 | + | ||
| 48 | + @NotEmpty(message = "物料规格不能为空") | ||
| 49 | + @ExcelProperty(index = 5) | ||
| 50 | + private String specifications; | ||
| 51 | + | ||
| 52 | + @NotEmpty(message = "物料单位不能为空") | ||
| 53 | + @ExcelProperty(index = 6) | ||
| 54 | + private String unitName; | ||
| 55 | + | ||
| 56 | + @ExcelProperty(index = 7) | ||
| 57 | + @NotNull(message = "出库数量不能为空") | ||
| 58 | + @Positive(message = "数量必须为正整数") | ||
| 59 | + private Long outInventoryNum; | ||
| 60 | + | ||
| 61 | + @NotNull(message = "出库日期不能为空") | ||
| 62 | + @ExcelProperty(index = 8) | ||
| 63 | + @JsonFormat(pattern = "yyyy-MM-dd") | ||
| 64 | + private LocalDate outDate; | ||
| 65 | + | ||
| 66 | + @NotEmpty(message = "归属公司不能为空") | ||
| 67 | + @ExcelProperty(index = 9) | ||
| 68 | + private String belongCompanyName; | ||
| 69 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/costfee/vo/MechanicalCostImport.java
| @@ -84,7 +84,7 @@ public class MechanicalCostImport { | @@ -84,7 +84,7 @@ public class MechanicalCostImport { | ||
| 84 | @ExcelProperty(index = 9) | 84 | @ExcelProperty(index = 9) |
| 85 | @NotNull(message = "使用年限不能为空") | 85 | @NotNull(message = "使用年限不能为空") |
| 86 | @Positive(message = "使用年限必须为正整数") | 86 | @Positive(message = "使用年限必须为正整数") |
| 87 | - private Long serviceLife; | 87 | + private Integer serviceLife; |
| 88 | 88 | ||
| 89 | /** | 89 | /** |
| 90 | * 结束使用时间 | 90 | * 结束使用时间 |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/device/DeviceClockRecordController.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.device; | ||
| 2 | + | ||
| 3 | +import org.springframework.web.bind.annotation.*; | ||
| 4 | +import jakarta.annotation.Resource; | ||
| 5 | +import org.springframework.validation.annotation.Validated; | ||
| 6 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 7 | +import io.swagger.v3.oas.annotations.tags.Tag; | ||
| 8 | +import io.swagger.v3.oas.annotations.Parameter; | ||
| 9 | +import io.swagger.v3.oas.annotations.Operation; | ||
| 10 | + | ||
| 11 | +import jakarta.validation.constraints.*; | ||
| 12 | +import jakarta.validation.*; | ||
| 13 | +import jakarta.servlet.http.*; | ||
| 14 | +import java.util.*; | ||
| 15 | +import java.io.IOException; | ||
| 16 | + | ||
| 17 | +import com.zteits.urbanops.framework.common.pojo.PageParam; | ||
| 18 | +import com.zteits.urbanops.framework.common.pojo.PageResult; | ||
| 19 | +import com.zteits.urbanops.framework.common.pojo.CommonResult; | ||
| 20 | +import com.zteits.urbanops.framework.common.util.object.BeanUtils; | ||
| 21 | +import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; | ||
| 22 | + | ||
| 23 | +import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; | ||
| 24 | + | ||
| 25 | +import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; | ||
| 26 | +import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*; | ||
| 27 | + | ||
| 28 | +import com.zteits.urbanops.module.garden.controller.admin.device.vo.*; | ||
| 29 | +import com.zteits.urbanops.module.garden.dal.dataobject.device.DeviceClockRecordDO; | ||
| 30 | +import com.zteits.urbanops.module.garden.service.device.DeviceClockRecordService; | ||
| 31 | + | ||
| 32 | +@Tag(name = "管理后台 - 员工打卡记录") | ||
| 33 | +@RestController | ||
| 34 | +@RequestMapping("/garden/device-clock-record") | ||
| 35 | +@Validated | ||
| 36 | +public class DeviceClockRecordController { | ||
| 37 | + | ||
| 38 | + @Resource | ||
| 39 | + private DeviceClockRecordService deviceClockRecordService; | ||
| 40 | + | ||
| 41 | + @PostMapping("/create") | ||
| 42 | + @Operation(summary = "创建员工打卡记录") | ||
| 43 | + @PreAuthorize("@ss.hasPermission('garden:device-clock-record:create')") | ||
| 44 | + public CommonResult<Integer> createDeviceClockRecord(@Valid @RequestBody DeviceClockRecordSaveReqVO createReqVO) { | ||
| 45 | + return success(deviceClockRecordService.createDeviceClockRecord(createReqVO)); | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + @PutMapping("/update") | ||
| 49 | + @Operation(summary = "更新员工打卡记录") | ||
| 50 | + @PreAuthorize("@ss.hasPermission('garden:device-clock-record:update')") | ||
| 51 | + public CommonResult<Boolean> updateDeviceClockRecord(@Valid @RequestBody DeviceClockRecordSaveReqVO updateReqVO) { | ||
| 52 | + deviceClockRecordService.updateDeviceClockRecord(updateReqVO); | ||
| 53 | + return success(true); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + @DeleteMapping("/delete") | ||
| 57 | + @Operation(summary = "删除员工打卡记录") | ||
| 58 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 59 | + @PreAuthorize("@ss.hasPermission('garden:device-clock-record:delete')") | ||
| 60 | + public CommonResult<Boolean> deleteDeviceClockRecord(@RequestParam("id") Integer id) { | ||
| 61 | + deviceClockRecordService.deleteDeviceClockRecord(id); | ||
| 62 | + return success(true); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + @DeleteMapping("/delete-list") | ||
| 66 | + @Parameter(name = "ids", description = "编号", required = true) | ||
| 67 | + @Operation(summary = "批量删除员工打卡记录") | ||
| 68 | + @PreAuthorize("@ss.hasPermission('garden:device-clock-record:delete')") | ||
| 69 | + public CommonResult<Boolean> deleteDeviceClockRecordList(@RequestParam("ids") List<Integer> ids) { | ||
| 70 | + deviceClockRecordService.deleteDeviceClockRecordListByIds(ids); | ||
| 71 | + return success(true); | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + @GetMapping("/get") | ||
| 75 | + @Operation(summary = "获得员工打卡记录") | ||
| 76 | + @Parameter(name = "id", description = "编号", required = true, example = "1024") | ||
| 77 | + @PreAuthorize("@ss.hasPermission('garden:device-clock-record:query')") | ||
| 78 | + public CommonResult<DeviceClockRecordRespVO> getDeviceClockRecord(@RequestParam("id") Integer id) { | ||
| 79 | + DeviceClockRecordDO deviceClockRecord = deviceClockRecordService.getDeviceClockRecord(id); | ||
| 80 | + return success(BeanUtils.toBean(deviceClockRecord, DeviceClockRecordRespVO.class)); | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + @GetMapping("/page") | ||
| 84 | + @Operation(summary = "获得员工打卡记录分页") | ||
| 85 | + @PreAuthorize("@ss.hasPermission('garden:device-clock-record:query')") | ||
| 86 | + public CommonResult<PageResult<DeviceClockRecordRespVO>> getDeviceClockRecordPage(@Valid DeviceClockRecordPageReqVO pageReqVO) { | ||
| 87 | + PageResult<DeviceClockRecordDO> pageResult = deviceClockRecordService.getDeviceClockRecordPage(pageReqVO); | ||
| 88 | + return success(BeanUtils.toBean(pageResult, DeviceClockRecordRespVO.class)); | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + @GetMapping("/export-excel") | ||
| 92 | + @Operation(summary = "导出员工打卡记录 Excel") | ||
| 93 | + @PreAuthorize("@ss.hasPermission('garden:device-clock-record:export')") | ||
| 94 | + @ApiAccessLog(operateType = EXPORT) | ||
| 95 | + public void exportDeviceClockRecordExcel(@Valid DeviceClockRecordPageReqVO pageReqVO, | ||
| 96 | + HttpServletResponse response) throws IOException { | ||
| 97 | + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | ||
| 98 | + List<DeviceClockRecordDO> list = deviceClockRecordService.getDeviceClockRecordPage(pageReqVO).getList(); | ||
| 99 | + // 导出 Excel | ||
| 100 | + ExcelUtils.write(response, "员工打卡记录.xls", "数据", DeviceClockRecordRespVO.class, | ||
| 101 | + BeanUtils.toBean(list, DeviceClockRecordRespVO.class)); | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | +} | ||
| 0 | \ No newline at end of file | 105 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/device/vo/DeviceClockRecordPageReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.device.vo; | ||
| 2 | + | ||
| 3 | +import lombok.*; | ||
| 4 | +import java.util.*; | ||
| 5 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 6 | +import com.zteits.urbanops.framework.common.pojo.PageParam; | ||
| 7 | +import java.math.BigDecimal; | ||
| 8 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 9 | +import java.time.LocalDateTime; | ||
| 10 | + | ||
| 11 | +import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 12 | + | ||
| 13 | +@Schema(description = "管理后台 - 员工打卡记录分页 Request VO") | ||
| 14 | +@Data | ||
| 15 | +public class DeviceClockRecordPageReqVO extends PageParam { | ||
| 16 | + | ||
| 17 | + @Schema(description = "设备编码") | ||
| 18 | + private String deviceCode; | ||
| 19 | + | ||
| 20 | + @Schema(description = "设备名称", example = "李四") | ||
| 21 | + private String deviceName; | ||
| 22 | + | ||
| 23 | + @Schema(description = "打卡类型:上班/下班", example = "2") | ||
| 24 | + private String punchType; | ||
| 25 | + | ||
| 26 | + @Schema(description = "高德GCJ02坐标系纬度") | ||
| 27 | + private BigDecimal latGcj02; | ||
| 28 | + | ||
| 29 | + @Schema(description = "高德GCJ02坐标系经度") | ||
| 30 | + private BigDecimal lngGcj02; | ||
| 31 | + | ||
| 32 | + @Schema(description = "详细地址") | ||
| 33 | + private String address; | ||
| 34 | + | ||
| 35 | + @Schema(description = "84坐标经度") | ||
| 36 | + private BigDecimal lng; | ||
| 37 | + | ||
| 38 | + @Schema(description = "84坐标纬度") | ||
| 39 | + private BigDecimal lat; | ||
| 40 | + | ||
| 41 | + @Schema(description = "状态位") | ||
| 42 | + private Integer statusBit; | ||
| 43 | + | ||
| 44 | + @Schema(description = "警告位") | ||
| 45 | + private Integer warnBit; | ||
| 46 | + | ||
| 47 | + @Schema(description = "提交人用户ID", example = "20708") | ||
| 48 | + private Long userId; | ||
| 49 | + | ||
| 50 | + @Schema(description = "用户昵称", example = "张三") | ||
| 51 | + private String nickname; | ||
| 52 | + | ||
| 53 | + @Schema(description = "归属(一级部门id)", example = "10917") | ||
| 54 | + private Long companyId; | ||
| 55 | + | ||
| 56 | + @Schema(description = "部门ID", example = "126") | ||
| 57 | + private Long deptId; | ||
| 58 | + | ||
| 59 | + @Schema(description = "业务线: yl-园林;wy-物业:sz-市政;例如:yl,wy") | ||
| 60 | + private String busiLine; | ||
| 61 | + | ||
| 62 | + @Schema(description = "创建时间") | ||
| 63 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 64 | + private LocalDateTime[] createTime; | ||
| 65 | + | ||
| 66 | +} | ||
| 0 | \ No newline at end of file | 67 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/device/vo/DeviceClockRecordRespVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.device.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.*; | ||
| 5 | +import java.util.*; | ||
| 6 | +import java.math.BigDecimal; | ||
| 7 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 8 | +import java.time.LocalDateTime; | ||
| 9 | +import cn.idev.excel.annotation.*; | ||
| 10 | + | ||
| 11 | +@Schema(description = "管理后台 - 员工打卡记录 Response VO") | ||
| 12 | +@Data | ||
| 13 | +@ExcelIgnoreUnannotated | ||
| 14 | +public class DeviceClockRecordRespVO { | ||
| 15 | + | ||
| 16 | + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10971") | ||
| 17 | + @ExcelProperty("主键ID") | ||
| 18 | + private Integer id; | ||
| 19 | + | ||
| 20 | + @Schema(description = "设备编码", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 21 | + @ExcelProperty("设备编码") | ||
| 22 | + private String deviceCode; | ||
| 23 | + | ||
| 24 | + @Schema(description = "设备名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") | ||
| 25 | + @ExcelProperty("设备名称") | ||
| 26 | + private String deviceName; | ||
| 27 | + | ||
| 28 | + @Schema(description = "打卡类型:上班/下班", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | ||
| 29 | + @ExcelProperty("打卡类型:上班/下班") | ||
| 30 | + private String punchType; | ||
| 31 | + | ||
| 32 | + @Schema(description = "高德GCJ02坐标系纬度") | ||
| 33 | + @ExcelProperty("高德GCJ02坐标系纬度") | ||
| 34 | + private BigDecimal latGcj02; | ||
| 35 | + | ||
| 36 | + @Schema(description = "高德GCJ02坐标系经度") | ||
| 37 | + @ExcelProperty("高德GCJ02坐标系经度") | ||
| 38 | + private BigDecimal lngGcj02; | ||
| 39 | + | ||
| 40 | + @Schema(description = "详细地址") | ||
| 41 | + @ExcelProperty("详细地址") | ||
| 42 | + private String address; | ||
| 43 | + | ||
| 44 | + @Schema(description = "84坐标经度") | ||
| 45 | + @ExcelProperty("84坐标经度") | ||
| 46 | + private BigDecimal lng; | ||
| 47 | + | ||
| 48 | + @Schema(description = "84坐标纬度") | ||
| 49 | + @ExcelProperty("84坐标纬度") | ||
| 50 | + private BigDecimal lat; | ||
| 51 | + | ||
| 52 | + @Schema(description = "状态位") | ||
| 53 | + @ExcelProperty("状态位") | ||
| 54 | + private Integer statusBit; | ||
| 55 | + | ||
| 56 | + @Schema(description = "警告位") | ||
| 57 | + @ExcelProperty("警告位") | ||
| 58 | + private Integer warnBit; | ||
| 59 | + | ||
| 60 | + @Schema(description = "提交人用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20708") | ||
| 61 | + @ExcelProperty("提交人用户ID") | ||
| 62 | + private Long userId; | ||
| 63 | + | ||
| 64 | + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") | ||
| 65 | + @ExcelProperty("用户昵称") | ||
| 66 | + private String nickname; | ||
| 67 | + | ||
| 68 | + @Schema(description = "归属(一级部门id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "10917") | ||
| 69 | + @ExcelProperty("归属(一级部门id)") | ||
| 70 | + private Long companyId; | ||
| 71 | + | ||
| 72 | + @Schema(description = "部门ID", example = "126") | ||
| 73 | + @ExcelProperty("部门ID") | ||
| 74 | + private Long deptId; | ||
| 75 | + | ||
| 76 | + @Schema(description = "业务线: yl-园林;wy-物业:sz-市政;例如:yl,wy", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 77 | + @ExcelProperty("业务线: yl-园林;wy-物业:sz-市政;例如:yl,wy") | ||
| 78 | + private String busiLine; | ||
| 79 | + | ||
| 80 | + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 81 | + @ExcelProperty("创建时间") | ||
| 82 | + private LocalDateTime createTime; | ||
| 83 | + | ||
| 84 | +} | ||
| 0 | \ No newline at end of file | 85 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/device/vo/DeviceClockRecordSaveReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.device.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.*; | ||
| 5 | +import java.util.*; | ||
| 6 | +import jakarta.validation.constraints.*; | ||
| 7 | +import java.math.BigDecimal; | ||
| 8 | + | ||
| 9 | +@Schema(description = "管理后台 - 员工打卡记录新增/修改 Request VO") | ||
| 10 | +@Data | ||
| 11 | +public class DeviceClockRecordSaveReqVO { | ||
| 12 | + | ||
| 13 | + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10971") | ||
| 14 | + private Integer id; | ||
| 15 | + | ||
| 16 | + @Schema(description = "设备编码", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 17 | + @NotEmpty(message = "设备编码不能为空") | ||
| 18 | + private String deviceCode; | ||
| 19 | + | ||
| 20 | + @Schema(description = "设备名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") | ||
| 21 | + @NotEmpty(message = "设备名称不能为空") | ||
| 22 | + private String deviceName; | ||
| 23 | + | ||
| 24 | + @Schema(description = "打卡类型:上班/下班", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | ||
| 25 | + @NotEmpty(message = "打卡类型:上班/下班不能为空") | ||
| 26 | + private String punchType; | ||
| 27 | + | ||
| 28 | + @Schema(description = "高德GCJ02坐标系纬度") | ||
| 29 | + private BigDecimal latGcj02; | ||
| 30 | + | ||
| 31 | + @Schema(description = "高德GCJ02坐标系经度") | ||
| 32 | + private BigDecimal lngGcj02; | ||
| 33 | + | ||
| 34 | + @Schema(description = "详细地址") | ||
| 35 | + private String address; | ||
| 36 | + | ||
| 37 | + @Schema(description = "84坐标经度") | ||
| 38 | + private BigDecimal lng; | ||
| 39 | + | ||
| 40 | + @Schema(description = "84坐标纬度") | ||
| 41 | + private BigDecimal lat; | ||
| 42 | + | ||
| 43 | + @Schema(description = "状态位") | ||
| 44 | + private Integer statusBit; | ||
| 45 | + | ||
| 46 | + @Schema(description = "警告位") | ||
| 47 | + private Integer warnBit; | ||
| 48 | + | ||
| 49 | + @Schema(description = "提交人用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20708") | ||
| 50 | + @NotNull(message = "提交人用户ID不能为空") | ||
| 51 | + private Long userId; | ||
| 52 | + | ||
| 53 | + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") | ||
| 54 | + @NotEmpty(message = "用户昵称不能为空") | ||
| 55 | + private String nickname; | ||
| 56 | + | ||
| 57 | + @Schema(description = "归属(一级部门id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "10917") | ||
| 58 | + @NotNull(message = "归属(一级部门id)不能为空") | ||
| 59 | + private Long companyId; | ||
| 60 | + | ||
| 61 | + @Schema(description = "部门ID", example = "126") | ||
| 62 | + private Long deptId; | ||
| 63 | + | ||
| 64 | + @Schema(description = "业务线: yl-园林;wy-物业:sz-市政;例如:yl,wy", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 65 | + @NotEmpty(message = "业务线: yl-园林;wy-物业:sz-市政;例如:yl,wy不能为空") | ||
| 66 | + private String busiLine; | ||
| 67 | + | ||
| 68 | +} | ||
| 0 | \ No newline at end of file | 69 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/DeviceUserController.java
| @@ -40,25 +40,32 @@ public class DeviceUserController { | @@ -40,25 +40,32 @@ public class DeviceUserController { | ||
| 40 | 40 | ||
| 41 | @PostMapping("/create") | 41 | @PostMapping("/create") |
| 42 | @Operation(summary = "创建设备用户关系") | 42 | @Operation(summary = "创建设备用户关系") |
| 43 | - @PreAuthorize("@ss.hasPermission('garden:device-user:create')") | 43 | + // @PreAuthorize("@ss.hasPermission('garden:device-user:create')") |
| 44 | public CommonResult<Long> createDeviceUser(@Valid @RequestBody DeviceUserSaveReqVO createReqVO) { | 44 | public CommonResult<Long> createDeviceUser(@Valid @RequestBody DeviceUserSaveReqVO createReqVO) { |
| 45 | return success(deviceUserService.createDeviceUser(createReqVO)); | 45 | return success(deviceUserService.createDeviceUser(createReqVO)); |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | - @PutMapping("/update") | 48 | + @PutMapping("/update/device") |
| 49 | @Operation(summary = "更新设备用户关系") | 49 | @Operation(summary = "更新设备用户关系") |
| 50 | - @PreAuthorize("@ss.hasPermission('garden:device-user:update')") | ||
| 51 | - public CommonResult<Boolean> updateDeviceUser(@Valid @RequestBody DeviceUserSaveReqVO updateReqVO) { | ||
| 52 | - deviceUserService.updateDeviceUser(updateReqVO); | 50 | + //@PreAuthorize("@ss.hasPermission('garden:device-user:update')") |
| 51 | + public CommonResult<Boolean> updateDevice(@Valid @RequestBody DeviceUserUpdateReqVO updateReqVO) { | ||
| 52 | + deviceUserService.updateDevice(updateReqVO); | ||
| 53 | return success(true); | 53 | return success(true); |
| 54 | } | 54 | } |
| 55 | 55 | ||
| 56 | + @GetMapping("/get/device_no") | ||
| 57 | + @Operation(summary = "通过设备编码获取设备绑定信息") | ||
| 58 | + public CommonResult<DeviceUserRespVO> getDeviceUserByDeviceNo(@RequestParam("deviceNo") @NotBlank String deviceNo) { | ||
| 59 | + DeviceUserRespVO deviceUser = deviceUserService.getDeviceUserByDeviceNo(deviceNo); | ||
| 60 | + return success(deviceUser); | ||
| 61 | + } | ||
| 62 | + | ||
| 56 | @DeleteMapping("/delete") | 63 | @DeleteMapping("/delete") |
| 57 | @Operation(summary = "删除设备用户关系") | 64 | @Operation(summary = "删除设备用户关系") |
| 58 | @Parameter(name = "id", description = "编号", required = true) | 65 | @Parameter(name = "id", description = "编号", required = true) |
| 59 | @PreAuthorize("@ss.hasPermission('garden:device-user:delete')") | 66 | @PreAuthorize("@ss.hasPermission('garden:device-user:delete')") |
| 60 | - public CommonResult<Boolean> deleteDeviceUser(@RequestParam("user_id") @NotNull Long userId, | ||
| 61 | - @RequestParam("device_no") @NotBlank String deviceNo) { | 67 | + public CommonResult<Boolean> deleteDeviceUser(@RequestParam("userId") @NotNull Long userId, |
| 68 | + @RequestParam("deviceNo") @NotBlank String deviceNo) { | ||
| 62 | deviceUserService.deleteDeviceUser(userId, deviceNo); | 69 | deviceUserService.deleteDeviceUser(userId, deviceNo); |
| 63 | return success(true); | 70 | return success(true); |
| 64 | } | 71 | } |
| @@ -85,8 +92,8 @@ public class DeviceUserController { | @@ -85,8 +92,8 @@ public class DeviceUserController { | ||
| 85 | @Operation(summary = "获得设备用户关系分页") | 92 | @Operation(summary = "获得设备用户关系分页") |
| 86 | //@PreAuthorize("@ss.hasPermission('garden:device-user:query')") | 93 | //@PreAuthorize("@ss.hasPermission('garden:device-user:query')") |
| 87 | public CommonResult<PageResult<DeviceUserRespVO>> getDeviceUserPage(@Valid DeviceUserPageReqVO pageReqVO) { | 94 | public CommonResult<PageResult<DeviceUserRespVO>> getDeviceUserPage(@Valid DeviceUserPageReqVO pageReqVO) { |
| 88 | - PageResult<DeviceUserDO> pageResult = deviceUserService.getDeviceUserPage(pageReqVO); | ||
| 89 | - return success(BeanUtils.toBean(pageResult, DeviceUserRespVO.class)); | 95 | + PageResult<DeviceUserRespVO> pageResult = deviceUserService.getDeviceUserPage(pageReqVO); |
| 96 | + return success(pageResult); | ||
| 90 | } | 97 | } |
| 91 | 98 | ||
| 92 | @GetMapping("/export-excel") | 99 | @GetMapping("/export-excel") |
| @@ -96,10 +103,20 @@ public class DeviceUserController { | @@ -96,10 +103,20 @@ public class DeviceUserController { | ||
| 96 | public void exportDeviceUserExcel(@Valid DeviceUserPageReqVO pageReqVO, | 103 | public void exportDeviceUserExcel(@Valid DeviceUserPageReqVO pageReqVO, |
| 97 | HttpServletResponse response) throws IOException { | 104 | HttpServletResponse response) throws IOException { |
| 98 | pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | 105 | pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); |
| 99 | - List<DeviceUserDO> list = deviceUserService.getDeviceUserPage(pageReqVO).getList(); | 106 | + List<DeviceUserRespVO> list = deviceUserService.getDeviceUserPage(pageReqVO).getList(); |
| 100 | // 导出 Excel | 107 | // 导出 Excel |
| 101 | ExcelUtils.write(response, "设备用户关系.xls", "数据", DeviceUserRespVO.class, | 108 | ExcelUtils.write(response, "设备用户关系.xls", "数据", DeviceUserRespVO.class, |
| 102 | - BeanUtils.toBean(list, DeviceUserRespVO.class)); | 109 | + list); |
| 103 | } | 110 | } |
| 104 | 111 | ||
| 112 | + @PostMapping("/findDeviceDeptTree") | ||
| 113 | + @Operation(summary = "获取IOT设备tree") | ||
| 114 | + //@PreAuthorize("@ss.hasPermission('garden:device-user:query')") | ||
| 115 | + public CommonResult<DeviceDeptTreeRespVO> findDeviceDeptTree(@Valid @RequestBody DeviceDeptTreeReqVO reqVO) { | ||
| 116 | + DeviceDeptTreeRespVO deviceUser = deviceUserService.findDeviceDeptTree(reqVO); | ||
| 117 | + return success(deviceUser); | ||
| 118 | + } | ||
| 119 | + | ||
| 120 | + | ||
| 121 | + | ||
| 105 | } | 122 | } |
| 106 | \ No newline at end of file | 123 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceDeptTreeReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.deviceuser.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.Data; | ||
| 5 | + | ||
| 6 | +@Schema(description = "管理后台 - IOT设备") | ||
| 7 | +@Data | ||
| 8 | +public class DeviceDeptTreeReqVO { | ||
| 9 | + | ||
| 10 | + /** | ||
| 11 | + * 设备编码 精确查询 | ||
| 12 | + */ | ||
| 13 | + private String deviceCode; | ||
| 14 | + | ||
| 15 | + /** | ||
| 16 | + * 设备名称 模糊查询 | ||
| 17 | + */ | ||
| 18 | + private String deviceName; | ||
| 19 | + | ||
| 20 | + /** | ||
| 21 | + * 设备归属部门名称 模糊查询 | ||
| 22 | + */ | ||
| 23 | + private String deviceDeptName; | ||
| 24 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceDeptTreeRespVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.deviceuser.vo; | ||
| 2 | + | ||
| 3 | + | ||
| 4 | +import lombok.Data; | ||
| 5 | +import java.util.Date; | ||
| 6 | +import java.util.List; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * 设备部门树响应数据 | ||
| 10 | + * | ||
| 11 | + * @author your-name | ||
| 12 | + * @since 2023-xx-xx | ||
| 13 | + */ | ||
| 14 | +@Data | ||
| 15 | +public class DeviceDeptTreeRespVO { | ||
| 16 | + | ||
| 17 | + /** | ||
| 18 | + * 编码 | ||
| 19 | + */ | ||
| 20 | + private String code; | ||
| 21 | + | ||
| 22 | + /** | ||
| 23 | + * 名称 | ||
| 24 | + */ | ||
| 25 | + private String name; | ||
| 26 | + /** | ||
| 27 | + * 父编码 | ||
| 28 | + */ | ||
| 29 | + private String parentCode; | ||
| 30 | + /** | ||
| 31 | + * 显示顺序 | ||
| 32 | + */ | ||
| 33 | + private Integer orderNum; | ||
| 34 | + | ||
| 35 | + /** | ||
| 36 | + * 部门状态(0正常 1停用) | ||
| 37 | + */ | ||
| 38 | + private String status; | ||
| 39 | + | ||
| 40 | + /** | ||
| 41 | + * 设备数量 | ||
| 42 | + */ | ||
| 43 | + private Integer deviceCount; | ||
| 44 | + | ||
| 45 | + /** | ||
| 46 | + * 创建时间 | ||
| 47 | + */ | ||
| 48 | + private Date createTime; | ||
| 49 | + /** | ||
| 50 | + * 节点类型:1部门 3设备 | ||
| 51 | + */ | ||
| 52 | + private Integer nodeType; | ||
| 53 | + | ||
| 54 | + /** | ||
| 55 | + * 节点类型为设备时,该值有值 | ||
| 56 | + * 产品名称 | ||
| 57 | + */ | ||
| 58 | + private String productName; | ||
| 59 | + /** | ||
| 60 | + * 节点类型为设备时,该值有值 | ||
| 61 | + * 产品编码 | ||
| 62 | + */ | ||
| 63 | + private String productCode; | ||
| 64 | + /** | ||
| 65 | + * 子节点,和当前一样的结构 | ||
| 66 | + */ | ||
| 67 | + private List<DeviceDeptTreeRespVO> children; | ||
| 68 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceUserRespVO.java
| @@ -57,5 +57,12 @@ public class DeviceUserRespVO { | @@ -57,5 +57,12 @@ public class DeviceUserRespVO { | ||
| 57 | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | 57 | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| 58 | private LocalDateTime createTime; | 58 | private LocalDateTime createTime; |
| 59 | 59 | ||
| 60 | + @Schema(description = "归属(一级部门id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "20800") | ||
| 61 | + @ExcelProperty("归属(一级部门id)") | ||
| 62 | + private String companyName; | ||
| 63 | + | ||
| 64 | + @ExcelProperty("部门(道路负责部门)") | ||
| 65 | + private String deptName; | ||
| 66 | + | ||
| 60 | 67 | ||
| 61 | } | 68 | } |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceUserSaveReqVO.java
| @@ -35,8 +35,10 @@ public class DeviceUserSaveReqVO { | @@ -35,8 +35,10 @@ public class DeviceUserSaveReqVO { | ||
| 35 | 35 | ||
| 36 | @Data | 36 | @Data |
| 37 | public static class DeviceInfoDO { | 37 | public static class DeviceInfoDO { |
| 38 | + | ||
| 39 | + private String productCode; | ||
| 40 | + | ||
| 38 | @Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") | 41 | @Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") |
| 39 | - @NotEmpty(message = "产品名称不能为空") | ||
| 40 | private String productName; | 42 | private String productName; |
| 41 | 43 | ||
| 42 | @Schema(description = "设备标识", requiredMode = Schema.RequiredMode.REQUIRED) | 44 | @Schema(description = "设备标识", requiredMode = Schema.RequiredMode.REQUIRED) |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceUserUpdateReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.deviceuser.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import jakarta.validation.Valid; | ||
| 5 | +import jakarta.validation.constraints.NotEmpty; | ||
| 6 | +import jakarta.validation.constraints.NotNull; | ||
| 7 | +import jakarta.validation.constraints.Size; | ||
| 8 | +import lombok.Data; | ||
| 9 | + | ||
| 10 | +import java.util.List; | ||
| 11 | + | ||
| 12 | +@Schema(description = "管理后台 - 设备用户关系新增/修改 Request VO") | ||
| 13 | +@Data | ||
| 14 | +public class DeviceUserUpdateReqVO { | ||
| 15 | + | ||
| 16 | + @Schema(description = "设备信息") | ||
| 17 | + @NotNull | ||
| 18 | + @Size(min = 1, message = "道路信息不能为空") | ||
| 19 | + @Valid | ||
| 20 | + private List<DeviceUserSaveReqVO.DeviceInfoDO> deviceInfoList; | ||
| 21 | + | ||
| 22 | + @Data | ||
| 23 | + public static class DeviceInfoDO { | ||
| 24 | + @Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") | ||
| 25 | + @NotEmpty(message = "产品名称不能为空") | ||
| 26 | + private String productName; | ||
| 27 | + | ||
| 28 | + @Schema(description = "设备标识", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 29 | + @NotEmpty(message = "设备标识不能为空") | ||
| 30 | + private String deviceNo; | ||
| 31 | + | ||
| 32 | + @Schema(description = "设备名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") | ||
| 33 | + @NotEmpty(message = "设备名称不能为空") | ||
| 34 | + private String deviceName; | ||
| 35 | + | ||
| 36 | + @Schema(description = "连接状态 : 在线:ONLINE || 离线:OFFLINE || 未连接:INIT", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 37 | + @NotEmpty(message = "连接状态 : 在线:ONLINE || 离线:OFFLINE || 未连接:INIT") | ||
| 38 | + private String deviceState; | ||
| 39 | + | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | +} | ||
| 0 | \ No newline at end of file | 43 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/EmergencyTaskController.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.emergencytask; | ||
| 2 | + | ||
| 3 | +import com.zteits.urbanops.framework.common.biz.system.dict.dto.DictDataRespDTO; | ||
| 4 | +import org.springframework.util.CollectionUtils; | ||
| 5 | +import org.springframework.web.bind.annotation.*; | ||
| 6 | +import jakarta.annotation.Resource; | ||
| 7 | +import org.springframework.validation.annotation.Validated; | ||
| 8 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 9 | +import io.swagger.v3.oas.annotations.tags.Tag; | ||
| 10 | +import io.swagger.v3.oas.annotations.Parameter; | ||
| 11 | +import io.swagger.v3.oas.annotations.Operation; | ||
| 12 | + | ||
| 13 | +import jakarta.validation.*; | ||
| 14 | +import jakarta.servlet.http.*; | ||
| 15 | +import java.util.*; | ||
| 16 | +import java.io.IOException; | ||
| 17 | +import java.util.stream.Collectors; | ||
| 18 | + | ||
| 19 | +import com.zteits.urbanops.framework.common.pojo.PageParam; | ||
| 20 | +import com.zteits.urbanops.framework.common.pojo.PageResult; | ||
| 21 | +import com.zteits.urbanops.framework.common.pojo.CommonResult; | ||
| 22 | + | ||
| 23 | +import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; | ||
| 24 | + | ||
| 25 | +import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; | ||
| 26 | + | ||
| 27 | +import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; | ||
| 28 | +import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*; | ||
| 29 | + | ||
| 30 | +import com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo.*; | ||
| 31 | +import com.zteits.urbanops.module.garden.service.emergencytask.EmergencyTaskService; | ||
| 32 | + | ||
| 33 | +@Tag(name = "管理后台 - 抢险任务主") | ||
| 34 | +@RestController | ||
| 35 | +@RequestMapping("/garden/emergency-task") | ||
| 36 | +@Validated | ||
| 37 | +public class EmergencyTaskController { | ||
| 38 | + | ||
| 39 | + @Resource | ||
| 40 | + private EmergencyTaskService emergencyTaskService; | ||
| 41 | + | ||
| 42 | + @PostMapping("/create") | ||
| 43 | + @Operation(summary = "创建抢险任务主") | ||
| 44 | + @PreAuthorize("@ss.hasPermission('garden:emergency-task:create')") | ||
| 45 | + public CommonResult<Long> createEmergencyTask(@Valid @RequestBody EmergencyTaskSaveReqVO createReqVO) { | ||
| 46 | + return success(emergencyTaskService.createEmergencyTask(createReqVO, true)); | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + @PutMapping("/update") | ||
| 50 | + @Operation(summary = "更新抢险任务主") | ||
| 51 | + @PreAuthorize("@ss.hasPermission('garden:emergency-task:update')") | ||
| 52 | + public CommonResult<Boolean> updateEmergencyTask(@Valid @RequestBody EmergencyTaskSaveReqVO updateReqVO) { | ||
| 53 | + emergencyTaskService.updateEmergencyTask(updateReqVO); | ||
| 54 | + return success(true); | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + @PostMapping("/approval") | ||
| 58 | + @Operation(summary = "抢险任务审批") | ||
| 59 | + @PreAuthorize("@ss.hasPermission('garden:emergency-task:approval')") | ||
| 60 | + public CommonResult<Integer> approvalEmergencyTask(@Valid @RequestBody EmergencyTaskApprovalReqVO createReqVO) { | ||
| 61 | + return success(emergencyTaskService.approvalEmergencyTask(createReqVO)); | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + @DeleteMapping("/delete/task_no") | ||
| 65 | + @Operation(summary = "删除抢险任务主") | ||
| 66 | + @Parameter(name = "task_no", description = "编号", required = true) | ||
| 67 | + @PreAuthorize("@ss.hasPermission('garden:emergency-task:delete')") | ||
| 68 | + public CommonResult<Boolean> deleteEmergencyTask(@RequestParam("task_no") String taskNo) { | ||
| 69 | + emergencyTaskService.deleteEmergencyTaskByTaskNo(taskNo); | ||
| 70 | + return success(true); | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + @DeleteMapping("/delete-list") | ||
| 74 | + @Parameter(name = "ids", description = "编号", required = true) | ||
| 75 | + @Operation(summary = "批量删除抢险任务主") | ||
| 76 | + @PreAuthorize("@ss.hasPermission('garden:emergency-task:delete')") | ||
| 77 | + public CommonResult<Boolean> deleteEmergencyTaskList(@RequestParam("ids") List<Long> ids) { | ||
| 78 | + emergencyTaskService.deleteEmergencyTaskListByIds(ids); | ||
| 79 | + return success(true); | ||
| 80 | + } | ||
| 81 | + | ||
| 82 | + @GetMapping("/get/task_no") | ||
| 83 | + @Operation(summary = "获得抢险任务主") | ||
| 84 | + @Parameter(name = "task_no", description = "编号", required = true, example = "1024") | ||
| 85 | + @PreAuthorize("@ss.hasPermission('garden:emergency-task:query')") | ||
| 86 | + public CommonResult<EmergencyTaskRespVO> getEmergencyTask(@RequestParam("task_no") String taskNo) { | ||
| 87 | + EmergencyTaskRespVO emergencyTask = emergencyTaskService.getEmergencyTaskByTaskNo(taskNo); | ||
| 88 | + return success(emergencyTask); | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + @GetMapping("/page") | ||
| 92 | + @Operation(summary = "获得抢险任务主分页") | ||
| 93 | + @PreAuthorize("@ss.hasPermission('garden:emergency-task:query')") | ||
| 94 | + public CommonResult<PageResult<EmergencyTaskRespVO>> getEmergencyTaskPage(@Valid EmergencyTaskPageReqVO pageReqVO) { | ||
| 95 | + PageResult<EmergencyTaskRespVO> pageResult = emergencyTaskService.getEmergencyTaskPage(pageReqVO); | ||
| 96 | + return success(pageResult); | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + @GetMapping("/export-excel") | ||
| 100 | + @Operation(summary = "导出抢险任务主 Excel") | ||
| 101 | + @PreAuthorize("@ss.hasPermission('garden:emergency-task:export')") | ||
| 102 | + @ApiAccessLog(operateType = EXPORT) | ||
| 103 | + public void exportEmergencyTaskExcel(@Valid EmergencyTaskPageReqVO pageReqVO, | ||
| 104 | + HttpServletResponse response) throws IOException { | ||
| 105 | + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | ||
| 106 | + List<EmergencyTaskRespVO> list = emergencyTaskService.getEmergencyTaskPage(pageReqVO).getList(); | ||
| 107 | + List<EmergencyTaskExcleRespVO> respList = new ArrayList<>(); | ||
| 108 | + | ||
| 109 | + //险情类型 1:树木倒伏 2:树木折枝 | ||
| 110 | + List<DictDataRespDTO> dictDataList = emergencyTaskService.getDictDataList("hazard_type"); | ||
| 111 | + | ||
| 112 | + //险情危害 1:砸车 2:砸房 3:砸人 4:无 | ||
| 113 | + List<DictDataRespDTO> hazardRiskList = emergencyTaskService.getDictDataList("hazard_risk"); | ||
| 114 | + //树木权属 1:专业权属 2:街道权属 3:其他 | ||
| 115 | + List<DictDataRespDTO> treePermissionsList = emergencyTaskService.getDictDataList("tree_permissions"); | ||
| 116 | + //机械类型 1:三轮车;2:货车;3:挖掘机 | ||
| 117 | + List<DictDataRespDTO> mechanicalTypeNameList = emergencyTaskService.getDictDataList("mechanical_type_name"); | ||
| 118 | + | ||
| 119 | + //案件状态 1-待提交 2-待审核 3-驳回 | ||
| 120 | + List<DictDataRespDTO> rescueStatusList = emergencyTaskService.getDictDataList("rescue_status"); | ||
| 121 | + | ||
| 122 | + | ||
| 123 | + list.forEach(emergencyTask -> { | ||
| 124 | + EmergencyTaskExcleRespVO emergencyTaskExcleRespVO = new EmergencyTaskExcleRespVO(); | ||
| 125 | + emergencyTaskExcleRespVO.setTaskNo(emergencyTask.getTaskNo()); | ||
| 126 | + emergencyTaskExcleRespVO.setDiscoveryTime(emergencyTask.getDiscoveryTime()); | ||
| 127 | + emergencyTaskExcleRespVO.setEmergencyTypeName(getLabel(dictDataList, emergencyTask.getEmergencyTypeId())); | ||
| 128 | + emergencyTaskExcleRespVO.setEmergencyHarmName(getLabel(hazardRiskList, emergencyTask.getEmergencyHarmId())); | ||
| 129 | + emergencyTaskExcleRespVO.setTreeOwnershipName(getLabel(treePermissionsList, emergencyTask.getTreeOwnershipId())); | ||
| 130 | + emergencyTaskExcleRespVO.setEmergencyLocation(emergencyTask.getEmergencyLocation()); | ||
| 131 | + emergencyTaskExcleRespVO.setReporter(emergencyTask.getReporter()); | ||
| 132 | + emergencyTaskExcleRespVO.setContactPhone(emergencyTask.getContactPhone()); | ||
| 133 | + emergencyTaskExcleRespVO.setEmergencyImg(emergencyTask.getEmergencyImg()); | ||
| 134 | + emergencyTaskExcleRespVO.setTreeSpecies(emergencyTask.getTreeSpecies()); | ||
| 135 | + emergencyTaskExcleRespVO.setTreeSpec(emergencyTask.getTreeSpec()); | ||
| 136 | + emergencyTaskExcleRespVO.setRescueStartTime(emergencyTask.getRescueStartTime()); | ||
| 137 | + emergencyTaskExcleRespVO.setRescueCompleteTime(emergencyTask.getRescueCompleteTime()); | ||
| 138 | + emergencyTaskExcleRespVO.setPersonnelCount(emergencyTask.getPersonnelCount()); | ||
| 139 | + emergencyTaskExcleRespVO.setEmergencyEndImg(emergencyTask.getEmergencyEndImg()); | ||
| 140 | + emergencyTaskExcleRespVO.setRemarks(emergencyTask.getRemarks()); | ||
| 141 | + emergencyTaskExcleRespVO.setBusiStatus(getLabel(rescueStatusList, emergencyTask.getBusiStatus())); | ||
| 142 | + emergencyTaskExcleRespVO.setCompanyName(emergencyTask.getCompanyName()); | ||
| 143 | + emergencyTaskExcleRespVO.setApprovalUserName(emergencyTask.getApprovalUserName()); | ||
| 144 | + emergencyTaskExcleRespVO.setApprovalRemarks(emergencyTask.getApprovalRemarks()); | ||
| 145 | + emergencyTaskExcleRespVO.setCreatorName(emergencyTask.getCreatorName()); | ||
| 146 | + emergencyTaskExcleRespVO.setCreateTime(emergencyTask.getCreateTime()); | ||
| 147 | + emergencyTaskExcleRespVO.setUpdaterName(emergencyTask.getUpdaterName()); | ||
| 148 | + List<String> machineryList = new ArrayList<>(); | ||
| 149 | + if(CollectionUtils.isEmpty(emergencyTask.getEmergencyMachineryList())){ | ||
| 150 | + emergencyTaskExcleRespVO.setMachineryInfo(Collections.emptyList()); | ||
| 151 | + }else{ | ||
| 152 | + emergencyTask.getEmergencyMachineryList().forEach(emergencyMachinery -> { | ||
| 153 | + String machineryName = getLabel(mechanicalTypeNameList, emergencyMachinery.getMachineryNameId()); | ||
| 154 | + Integer machineryCount = emergencyMachinery.getMachineryCount(); | ||
| 155 | + machineryList.add(machineryName + ":" + machineryCount); | ||
| 156 | + }); | ||
| 157 | + emergencyTaskExcleRespVO.setMachineryInfo(machineryList); | ||
| 158 | + } | ||
| 159 | + respList.add(emergencyTaskExcleRespVO); | ||
| 160 | + }); | ||
| 161 | + | ||
| 162 | + | ||
| 163 | + // 导出 Excel | ||
| 164 | + ExcelUtils.write(response, "抢险任务主.xls", "数据", EmergencyTaskExcleRespVO.class, respList); | ||
| 165 | + } | ||
| 166 | + | ||
| 167 | + private String getLabel(List<DictDataRespDTO> dictDataList, Integer id){ | ||
| 168 | + if(CollectionUtils.isEmpty(dictDataList)){ | ||
| 169 | + return ""; | ||
| 170 | + } | ||
| 171 | + Map<String, String> nameMap = dictDataList.stream() | ||
| 172 | + .collect(Collectors.toMap( | ||
| 173 | + DictDataRespDTO::getValue, // Key=id | ||
| 174 | + DictDataRespDTO::getLabel // Value=name | ||
| 175 | + )); | ||
| 176 | + | ||
| 177 | + return nameMap.get(String.valueOf( id)); | ||
| 178 | + } | ||
| 179 | + | ||
| 180 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyMachineryPageReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo; | ||
| 2 | + | ||
| 3 | +import lombok.*; | ||
| 4 | +import java.util.*; | ||
| 5 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 6 | +import com.zteits.urbanops.framework.common.pojo.PageParam; | ||
| 7 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 8 | +import java.time.LocalDateTime; | ||
| 9 | + | ||
| 10 | +import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 11 | + | ||
| 12 | +@Schema(description = "管理后台 - 抢险机械子分页 Request VO") | ||
| 13 | +@Data | ||
| 14 | +public class EmergencyMachineryPageReqVO extends PageParam { | ||
| 15 | + | ||
| 16 | + @Schema(description = "关联任务主表ID", example = "24066") | ||
| 17 | + private Long taskId; | ||
| 18 | + | ||
| 19 | + @Schema(description = "机械名称(如:三轮车)", example = "21485") | ||
| 20 | + private Integer machineryNameId; | ||
| 21 | + | ||
| 22 | + @Schema(description = "机械数量", example = "28764") | ||
| 23 | + private Integer machineryCount; | ||
| 24 | + | ||
| 25 | + @Schema(description = "创建者", example = "李四") | ||
| 26 | + private String creatorName; | ||
| 27 | + | ||
| 28 | + @Schema(description = "创建时间") | ||
| 29 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 30 | + private LocalDateTime[] createTime; | ||
| 31 | + | ||
| 32 | + @Schema(description = "更新者", example = "张三") | ||
| 33 | + private String updaterName; | ||
| 34 | + | ||
| 35 | +} | ||
| 0 | \ No newline at end of file | 36 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyMachineryRespVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.*; | ||
| 5 | +import java.util.*; | ||
| 6 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 7 | +import java.time.LocalDateTime; | ||
| 8 | +import cn.idev.excel.annotation.*; | ||
| 9 | + | ||
| 10 | +@Schema(description = "管理后台 - 抢险机械子 Response VO") | ||
| 11 | +@Data | ||
| 12 | +@ExcelIgnoreUnannotated | ||
| 13 | +public class EmergencyMachineryRespVO { | ||
| 14 | + | ||
| 15 | + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1541") | ||
| 16 | + @ExcelProperty("主键ID") | ||
| 17 | + private Long id; | ||
| 18 | + | ||
| 19 | + @Schema(description = "关联任务主表ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "24066") | ||
| 20 | + @ExcelProperty("关联任务主表ID") | ||
| 21 | + private Long taskId; | ||
| 22 | + | ||
| 23 | + @Schema(description = "机械名称(如:三轮车)", requiredMode = Schema.RequiredMode.REQUIRED, example = "21485") | ||
| 24 | + @ExcelProperty("机械名称(如:三轮车)") | ||
| 25 | + private Integer machineryNameId; | ||
| 26 | + | ||
| 27 | + @Schema(description = "机械数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "28764") | ||
| 28 | + @ExcelProperty("机械数量") | ||
| 29 | + private Integer machineryCount; | ||
| 30 | + | ||
| 31 | + @Schema(description = "创建者", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") | ||
| 32 | + @ExcelProperty("创建者") | ||
| 33 | + private String creatorName; | ||
| 34 | + | ||
| 35 | + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 36 | + @ExcelProperty("创建时间") | ||
| 37 | + private LocalDateTime createTime; | ||
| 38 | + | ||
| 39 | + @Schema(description = "更新者", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") | ||
| 40 | + @ExcelProperty("更新者") | ||
| 41 | + private String updaterName; | ||
| 42 | + | ||
| 43 | +} | ||
| 0 | \ No newline at end of file | 44 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyMachinerySaveReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.*; | ||
| 5 | +import java.util.*; | ||
| 6 | +import jakarta.validation.constraints.*; | ||
| 7 | + | ||
| 8 | +@Schema(description = "管理后台 - 抢险机械子新增/修改 Request VO") | ||
| 9 | +@Data | ||
| 10 | +public class EmergencyMachinerySaveReqVO { | ||
| 11 | + | ||
| 12 | + @Schema(description = "机械名称(如:三轮车)", requiredMode = Schema.RequiredMode.REQUIRED, example = "21485") | ||
| 13 | + @NotNull(message = "机械名称(如:三轮车)不能为空") | ||
| 14 | + private Integer machineryNameId; | ||
| 15 | + | ||
| 16 | + @Schema(description = "机械数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "28764") | ||
| 17 | + @NotNull(message = "机械数量不能为空") | ||
| 18 | + private Integer machineryCount; | ||
| 19 | + | ||
| 20 | +} | ||
| 0 | \ No newline at end of file | 21 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyTaskApprovalReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import jakarta.validation.constraints.*; | ||
| 5 | +import lombok.Data; | ||
| 6 | + | ||
| 7 | +@Schema(description = "管理后台 - 抢险任务主新增/修改 Request VO") | ||
| 8 | +@Data | ||
| 9 | +public class EmergencyTaskApprovalReqVO { | ||
| 10 | + | ||
| 11 | + @Schema(description = "任务编号(唯一标识,如生成规则:TASK+时间戳)", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 12 | + @NotEmpty(message = "任务编号(唯一标识,如生成规则:TASK+时间戳)不能为空") | ||
| 13 | + private String taskNo; | ||
| 14 | + | ||
| 15 | + | ||
| 16 | + @Schema(description = "案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 17 | + @NotNull(message = "案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结 不能为空") | ||
| 18 | + @Min(value = 1, message = "案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结不能小于 1") | ||
| 19 | + @Max(value = 5, message = "案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结不能大于 5") | ||
| 20 | + private Integer busiStatus; | ||
| 21 | + | ||
| 22 | + @Schema(description = "审批备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "审批备注") | ||
| 23 | + private String approvalRemarks; | ||
| 24 | + | ||
| 25 | +} | ||
| 0 | \ No newline at end of file | 26 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyTaskExcleRespVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo; | ||
| 2 | + | ||
| 3 | +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; | ||
| 4 | +import cn.idev.excel.annotation.ExcelProperty; | ||
| 5 | +import cn.idev.excel.annotation.write.style.ColumnWidth; | ||
| 6 | +import com.zteits.urbanops.framework.excel.core.convert.ImageListConverter; | ||
| 7 | +import com.zteits.urbanops.framework.excel.core.convert.ListToStringConverter; | ||
| 8 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 9 | +import lombok.Data; | ||
| 10 | + | ||
| 11 | +import java.time.LocalDateTime; | ||
| 12 | +import java.util.List; | ||
| 13 | + | ||
| 14 | +@Schema(description = "管理后台 - 抢险任务主 Response VO") | ||
| 15 | +@Data | ||
| 16 | +@ExcelIgnoreUnannotated | ||
| 17 | +public class EmergencyTaskExcleRespVO { | ||
| 18 | + | ||
| 19 | + @Schema(description = "任务编号(唯一标识,如生成规则:TASK+时间戳)", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 20 | + @ExcelProperty("案件编号") | ||
| 21 | + private String taskNo; | ||
| 22 | + | ||
| 23 | + @Schema(description = "发现险情时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 24 | + @ExcelProperty("发现险情时间") | ||
| 25 | + private LocalDateTime discoveryTime; | ||
| 26 | + | ||
| 27 | + @Schema(description = "险情类型(如:树木倒伏)", requiredMode = Schema.RequiredMode.REQUIRED, example = "5209") | ||
| 28 | + @ExcelProperty("险情类型") | ||
| 29 | + private String emergencyTypeName; | ||
| 30 | + | ||
| 31 | + @Schema(description = "险情危害(如:无)", requiredMode = Schema.RequiredMode.REQUIRED, example = "16325") | ||
| 32 | + @ExcelProperty("险情危害") | ||
| 33 | + private String emergencyHarmName; | ||
| 34 | + | ||
| 35 | + @Schema(description = "树木权属(如:专业权属)", requiredMode = Schema.RequiredMode.REQUIRED, example = "19498") | ||
| 36 | + @ExcelProperty("树木权属") | ||
| 37 | + private String treeOwnershipName; | ||
| 38 | + | ||
| 39 | + @Schema(description = "险情地点", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 40 | + @ExcelProperty("险情地点") | ||
| 41 | + private String emergencyLocation; | ||
| 42 | + | ||
| 43 | + @Schema(description = "上报人", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 44 | + @ExcelProperty("上报人") | ||
| 45 | + private String reporter; | ||
| 46 | + | ||
| 47 | + @Schema(description = "联系电话", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 48 | + @ExcelProperty("联系电话") | ||
| 49 | + private String contactPhone; | ||
| 50 | + | ||
| 51 | + @Schema(description = "抢险开始时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 52 | + @ExcelProperty("抢险开始时间") | ||
| 53 | + private LocalDateTime rescueStartTime; | ||
| 54 | + | ||
| 55 | + @Schema(description = "抢险中照片", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 56 | + //@ExcelProperty(value="抢险中照片", converter = ListToStringConverter.class) | ||
| 57 | + @ExcelProperty(value = "抢险中照片", converter = ImageListConverter.class) | ||
| 58 | + @ColumnWidth(70) | ||
| 59 | + private List<String> emergencyImg; | ||
| 60 | + | ||
| 61 | + @Schema(description = "树种(如:国槐)") | ||
| 62 | + @ExcelProperty("树种") | ||
| 63 | + private String treeSpecies; | ||
| 64 | + | ||
| 65 | + @Schema(description = "树木规格") | ||
| 66 | + @ExcelProperty("树木规格") | ||
| 67 | + private String treeSpec; | ||
| 68 | + | ||
| 69 | + @Schema(description = "抢险完成时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 70 | + @ExcelProperty("抢险完成时间") | ||
| 71 | + private LocalDateTime rescueCompleteTime; | ||
| 72 | + | ||
| 73 | + @Schema(description = "出动人员数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "3371") | ||
| 74 | + @ExcelProperty("出动人员数量") | ||
| 75 | + private Integer personnelCount; | ||
| 76 | + | ||
| 77 | + @Schema(description = "抢险结束照片", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 78 | + //@ExcelProperty(value="抢险结束照片", converter = ListToStringConverter.class) | ||
| 79 | + @ExcelProperty(value = "抢险结束照片", converter = ImageListConverter.class) | ||
| 80 | + @ColumnWidth(70) | ||
| 81 | + private List<String> emergencyEndImg; | ||
| 82 | + | ||
| 83 | + @Schema(description = "备注") | ||
| 84 | + @ExcelProperty("备注") | ||
| 85 | + private String remarks; | ||
| 86 | + | ||
| 87 | + @Schema(description = "案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 88 | + @ExcelProperty("案件状态") | ||
| 89 | + private String busiStatus; | ||
| 90 | + | ||
| 91 | + @Schema(description = "审批人", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") | ||
| 92 | + @ExcelProperty("审批人") | ||
| 93 | + private String approvalUserName; | ||
| 94 | + | ||
| 95 | + @Schema(description = "审批备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "审批备注") | ||
| 96 | + @ExcelProperty("审批备注") | ||
| 97 | + private String approvalRemarks; | ||
| 98 | + | ||
| 99 | + | ||
| 100 | + @Schema(description = "创建者", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") | ||
| 101 | + @ExcelProperty("创建者") | ||
| 102 | + private String creatorName; | ||
| 103 | + | ||
| 104 | + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 105 | + @ExcelProperty("创建时间") | ||
| 106 | + private LocalDateTime createTime; | ||
| 107 | + | ||
| 108 | + @Schema(description = "更新者", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") | ||
| 109 | + @ExcelProperty("更新者") | ||
| 110 | + private String updaterName; | ||
| 111 | + | ||
| 112 | + @ExcelProperty(value="机械信息", converter = ListToStringConverter.class) | ||
| 113 | + private List<String> machineryInfo; | ||
| 114 | + | ||
| 115 | + @Schema(description = "归属(一级部门id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "20800") | ||
| 116 | + @ExcelProperty("归属公司") | ||
| 117 | + private String companyName; | ||
| 118 | + | ||
| 119 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyTaskPageReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo; | ||
| 2 | + | ||
| 3 | +import lombok.*; | ||
| 4 | + | ||
| 5 | +import java.time.LocalDate; | ||
| 6 | +import java.util.*; | ||
| 7 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 8 | +import com.zteits.urbanops.framework.common.pojo.PageParam; | ||
| 9 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 10 | +import java.time.LocalDateTime; | ||
| 11 | + | ||
| 12 | +import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; | ||
| 13 | +import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 14 | + | ||
| 15 | +@Schema(description = "管理后台 - 抢险任务主分页 Request VO") | ||
| 16 | +@Data | ||
| 17 | +public class EmergencyTaskPageReqVO extends PageParam { | ||
| 18 | + | ||
| 19 | + @Schema(description = "任务编号(唯一标识,如生成规则:TASK+时间戳)") | ||
| 20 | + private String taskNo; | ||
| 21 | + | ||
| 22 | + @Schema(description = "险情类型(如:树木倒伏)", example = "5209") | ||
| 23 | + private Integer emergencyTypeId; | ||
| 24 | + | ||
| 25 | + @Schema(description = "险情危害(如:无)", example = "16325") | ||
| 26 | + private Integer emergencyHarmId; | ||
| 27 | + | ||
| 28 | + @Schema(description = "树木权属(如:专业权属)", example = "19498") | ||
| 29 | + private Integer treeOwnershipId; | ||
| 30 | + | ||
| 31 | + @Schema(description = "险情地点") | ||
| 32 | + private String emergencyLocation; | ||
| 33 | + | ||
| 34 | + @Schema(description = "抢险开始时间") | ||
| 35 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) | ||
| 36 | + private LocalDate startTime; | ||
| 37 | + | ||
| 38 | + @Schema(description = "抢险结束时间") | ||
| 39 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) | ||
| 40 | + private LocalDate endTime; | ||
| 41 | + | ||
| 42 | + | ||
| 43 | + @Schema(description = "案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结", example = "1") | ||
| 44 | + private Integer busiStatus; | ||
| 45 | + | ||
| 46 | + @Schema(description = "归属(一级部门id)", example = "6353") | ||
| 47 | + private Long companyId; | ||
| 48 | + | ||
| 49 | + | ||
| 50 | + private List<Integer> busiStatusList; | ||
| 51 | + | ||
| 52 | +} | ||
| 0 | \ No newline at end of file | 53 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyTaskRespVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo; | ||
| 2 | + | ||
| 3 | +import com.zteits.urbanops.framework.excel.core.convert.ListToStringConverter; | ||
| 4 | +import com.zteits.urbanops.module.garden.dal.dataobject.emergencytask.EmergencyMachineryDO; | ||
| 5 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 6 | +import lombok.*; | ||
| 7 | +import java.util.*; | ||
| 8 | +import java.time.LocalDateTime; | ||
| 9 | +import cn.idev.excel.annotation.*; | ||
| 10 | + | ||
| 11 | +@Schema(description = "管理后台 - 抢险任务主 Response VO") | ||
| 12 | +@Data | ||
| 13 | +@ExcelIgnoreUnannotated | ||
| 14 | +public class EmergencyTaskRespVO { | ||
| 15 | + | ||
| 16 | + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10092") | ||
| 17 | + @ExcelProperty("主键ID") | ||
| 18 | + private Long id; | ||
| 19 | + | ||
| 20 | + @Schema(description = "任务编号(唯一标识,如生成规则:TASK+时间戳)", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 21 | + @ExcelProperty("任务编号(唯一标识,如生成规则:TASK+时间戳)") | ||
| 22 | + private String taskNo; | ||
| 23 | + | ||
| 24 | + @Schema(description = "发现险情时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 25 | + @ExcelProperty("发现险情时间") | ||
| 26 | + private LocalDateTime discoveryTime; | ||
| 27 | + | ||
| 28 | + @Schema(description = "险情类型(如:树木倒伏)", requiredMode = Schema.RequiredMode.REQUIRED, example = "5209") | ||
| 29 | + @ExcelProperty("险情类型:1:树木倒伏 2:树木折枝") | ||
| 30 | + private Integer emergencyTypeId; | ||
| 31 | + | ||
| 32 | + @Schema(description = "险情危害(如:无)", requiredMode = Schema.RequiredMode.REQUIRED, example = "16325") | ||
| 33 | + @ExcelProperty("险情危害(如:无)") | ||
| 34 | + private Integer emergencyHarmId; | ||
| 35 | + | ||
| 36 | + @Schema(description = "树木权属(如:专业权属)", requiredMode = Schema.RequiredMode.REQUIRED, example = "19498") | ||
| 37 | + @ExcelProperty("树木权属 1:砸车 2:砸房 3:砸人 4:无") | ||
| 38 | + private Integer treeOwnershipId; | ||
| 39 | + | ||
| 40 | + @Schema(description = "险情地点", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 41 | + @ExcelProperty("险情地点") | ||
| 42 | + private String emergencyLocation; | ||
| 43 | + | ||
| 44 | + @Schema(description = "上报人", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 45 | + @ExcelProperty("上报人") | ||
| 46 | + private String reporter; | ||
| 47 | + | ||
| 48 | + @Schema(description = "联系电话", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 49 | + @ExcelProperty("联系电话") | ||
| 50 | + private String contactPhone; | ||
| 51 | + | ||
| 52 | + @Schema(description = "抢险开始时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 53 | + @ExcelProperty("抢险开始时间") | ||
| 54 | + private LocalDateTime rescueStartTime; | ||
| 55 | + | ||
| 56 | + @Schema(description = "抢险中照片", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 57 | + @ExcelProperty(value="抢险中照片", converter = ListToStringConverter.class) | ||
| 58 | + private List<String> emergencyImg; | ||
| 59 | + | ||
| 60 | + @Schema(description = "树种(如:国槐)") | ||
| 61 | + @ExcelProperty("树种(如:国槐)") | ||
| 62 | + private String treeSpecies; | ||
| 63 | + | ||
| 64 | + @Schema(description = "树木规格(如:胸径20厘米)") | ||
| 65 | + @ExcelProperty("树木规格(如:胸径20厘米)") | ||
| 66 | + private String treeSpec; | ||
| 67 | + | ||
| 68 | + @Schema(description = "抢险完成时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 69 | + @ExcelProperty("抢险完成时间") | ||
| 70 | + private LocalDateTime rescueCompleteTime; | ||
| 71 | + | ||
| 72 | + @Schema(description = "出动人员数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "3371") | ||
| 73 | + @ExcelProperty("出动人员数量") | ||
| 74 | + private Integer personnelCount; | ||
| 75 | + | ||
| 76 | + @Schema(description = "抢险结束照片", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 77 | + @ExcelProperty(value="抢险结束照片", converter = ListToStringConverter.class) | ||
| 78 | + private List<String> emergencyEndImg; | ||
| 79 | + | ||
| 80 | + @Schema(description = "备注") | ||
| 81 | + @ExcelProperty("备注") | ||
| 82 | + private String remarks; | ||
| 83 | + | ||
| 84 | + @Schema(description = "案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 85 | + @ExcelProperty("案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结") | ||
| 86 | + private Integer busiStatus; | ||
| 87 | + | ||
| 88 | + @Schema(description = "工作流审批状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 89 | + @ExcelProperty("工作流审批状态") | ||
| 90 | + private Integer status; | ||
| 91 | + | ||
| 92 | + @Schema(description = "流程实例的编号", example = "30197") | ||
| 93 | + @ExcelProperty("流程实例的编号") | ||
| 94 | + private String processInstanceId; | ||
| 95 | + | ||
| 96 | + @Schema(description = "审批人ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20789") | ||
| 97 | + @ExcelProperty("审批人ID") | ||
| 98 | + private String approvalUserId; | ||
| 99 | + | ||
| 100 | + @Schema(description = "审批人", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") | ||
| 101 | + @ExcelProperty("审批人") | ||
| 102 | + private String approvalUserName; | ||
| 103 | + | ||
| 104 | + @Schema(description = "审批备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "审批备注") | ||
| 105 | + @ExcelProperty("审批备注") | ||
| 106 | + private String approvalRemarks; | ||
| 107 | + | ||
| 108 | + @Schema(description = "归属(一级部门id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "6353") | ||
| 109 | + @ExcelProperty("归属(一级部门id)") | ||
| 110 | + private Long companyId; | ||
| 111 | + | ||
| 112 | + @Schema(description = "部门ID(道路负责部门id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "27559") | ||
| 113 | + @ExcelProperty("部门ID(道路负责部门id)") | ||
| 114 | + private Long deptId; | ||
| 115 | + | ||
| 116 | + @Schema(description = "创建者", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") | ||
| 117 | + @ExcelProperty("创建者") | ||
| 118 | + private String creatorName; | ||
| 119 | + | ||
| 120 | + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 121 | + @ExcelProperty("创建时间") | ||
| 122 | + private LocalDateTime createTime; | ||
| 123 | + | ||
| 124 | + @Schema(description = "更新者", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") | ||
| 125 | + @ExcelProperty("更新者") | ||
| 126 | + private String updaterName; | ||
| 127 | + | ||
| 128 | + @ExcelProperty(value="机械信息", converter = ListToStringConverter.class) | ||
| 129 | + private List<EmergencyMachineryDO> emergencyMachineryList; | ||
| 130 | + | ||
| 131 | + @Schema(description = "归属(一级部门id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "20800") | ||
| 132 | + @ExcelProperty("归属(一级部门id)") | ||
| 133 | + private String companyName; | ||
| 134 | + | ||
| 135 | + @Schema(description = "部门(道路负责部门id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "12055") | ||
| 136 | + @ExcelProperty("部门") | ||
| 137 | + private String deptName; | ||
| 138 | + | ||
| 139 | +} | ||
| 0 | \ No newline at end of file | 140 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/emergencytask/vo/EmergencyTaskSaveReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.emergencytask.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.*; | ||
| 5 | +import java.util.*; | ||
| 6 | +import jakarta.validation.constraints.*; | ||
| 7 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 8 | +import java.time.LocalDateTime; | ||
| 9 | + | ||
| 10 | +@Schema(description = "管理后台 - 抢险任务主新增/修改 Request VO") | ||
| 11 | +@Data | ||
| 12 | +public class EmergencyTaskSaveReqVO { | ||
| 13 | + | ||
| 14 | + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "30197") | ||
| 15 | + private String taskNo; | ||
| 16 | + | ||
| 17 | + @Schema(description = "发现险情时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 18 | + @NotNull(message = "发现险情时间不能为空") | ||
| 19 | + private LocalDateTime discoveryTime; | ||
| 20 | + | ||
| 21 | + @Schema(description = "险情类型(如:树木倒伏)", requiredMode = Schema.RequiredMode.REQUIRED, example = "5209") | ||
| 22 | + @NotNull(message = "险情类型(如:树木倒伏)不能为空") | ||
| 23 | + private Integer emergencyTypeId; | ||
| 24 | + | ||
| 25 | + @Schema(description = "险情危害(如:无)", requiredMode = Schema.RequiredMode.REQUIRED, example = "16325") | ||
| 26 | + @NotNull(message = "险情危害(如:无)不能为空") | ||
| 27 | + private Integer emergencyHarmId; | ||
| 28 | + | ||
| 29 | + @Schema(description = "树木权属(如:专业权属)", requiredMode = Schema.RequiredMode.REQUIRED, example = "19498") | ||
| 30 | + @NotNull(message = "树木权属(如:专业权属)不能为空") | ||
| 31 | + private Integer treeOwnershipId; | ||
| 32 | + | ||
| 33 | + @Schema(description = "险情地点", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 34 | + @NotEmpty(message = "险情地点不能为空") | ||
| 35 | + @Size(max = 100, message = "险情地点长度不能超过 100 个字符") | ||
| 36 | + private String emergencyLocation; | ||
| 37 | + | ||
| 38 | + @Schema(description = "上报人", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 39 | + private String reporter; | ||
| 40 | + | ||
| 41 | + @Schema(description = "联系电话", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 42 | + @NotEmpty(message = "联系电话不能为空") | ||
| 43 | + @Pattern(regexp = "^1[3-9]\\d{9}$", message = "联系电话格式不正确,应为 11 位手机号") | ||
| 44 | + private String contactPhone; | ||
| 45 | + | ||
| 46 | + @Schema(description = "抢险开始时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 47 | + @NotNull(message = "抢险开始时间不能为空") | ||
| 48 | + private LocalDateTime rescueStartTime; | ||
| 49 | + | ||
| 50 | + @Schema(description = "抢险中照片", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 51 | + @NotNull(message = "抢险中照片不能为空") | ||
| 52 | + @Size(min = 1, message = "抢险中照片最少1张") | ||
| 53 | + private List<String> emergencyImg; | ||
| 54 | + | ||
| 55 | + @Schema(description = "树种(如:国槐)") | ||
| 56 | + @Size(max = 100, message = "险情地点长度不能超过 255 个字符") | ||
| 57 | + private String treeSpecies; | ||
| 58 | + | ||
| 59 | + @Schema(description = "树木规格(如:胸径20厘米)") | ||
| 60 | + @Size(max = 100, message = "树木规格100个字符") | ||
| 61 | + private String treeSpec; | ||
| 62 | + | ||
| 63 | + @Schema(description = "抢险完成时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 64 | + @NotNull(message = "抢险完成时间不能为空") | ||
| 65 | + private LocalDateTime rescueCompleteTime; | ||
| 66 | + | ||
| 67 | + @Schema(description = "出动人员数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "3371") | ||
| 68 | + @NotNull(message = "出动人员数量不能为空") | ||
| 69 | + private Integer personnelCount; | ||
| 70 | + | ||
| 71 | + @Schema(description = "抢险结束照片", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 72 | + private List<String> emergencyEndImg; | ||
| 73 | + | ||
| 74 | + @Schema(description = "备注") | ||
| 75 | + private String remarks; | ||
| 76 | + | ||
| 77 | + @Schema(description = "案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 78 | + @NotNull(message = "案件状态 1-待提交 2-待审核 3-驳回 4-关闭;5-完结不能为空") | ||
| 79 | + private Integer busiStatus; | ||
| 80 | + | ||
| 81 | + @Schema(description = "工作流审批状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 82 | + @NotNull(message = "工作流审批状态不能为空") | ||
| 83 | + private Integer status; | ||
| 84 | + | ||
| 85 | + @Schema(description = "流程实例的编号", example = "30197") | ||
| 86 | + private String processInstanceId; | ||
| 87 | + | ||
| 88 | + @Schema(description = "审批人ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20789") | ||
| 89 | + @NotEmpty(message = "审批人ID不能为空") | ||
| 90 | + private String approvalUserId; | ||
| 91 | + | ||
| 92 | + @Schema(description = "审批人", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") | ||
| 93 | + @NotEmpty(message = "审批人不能为空") | ||
| 94 | + private String approvalUserName; | ||
| 95 | + | ||
| 96 | + @Schema(description = "使用机械", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") | ||
| 97 | + private List<EmergencyMachinerySaveReqVO> emergencyMachineryList; | ||
| 98 | + | ||
| 99 | +} | ||
| 0 | \ No newline at end of file | 100 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/homepage/vo/CommitTaskStatisticsRespVo.java
| @@ -13,6 +13,8 @@ public class CommitTaskStatisticsRespVo { | @@ -13,6 +13,8 @@ public class CommitTaskStatisticsRespVo { | ||
| 13 | 13 | ||
| 14 | private String dateValue; | 14 | private String dateValue; |
| 15 | 15 | ||
| 16 | + private String currentDate; | ||
| 17 | + | ||
| 16 | private String busiLine; | 18 | private String busiLine; |
| 17 | 19 | ||
| 18 | private String busiLineName; | 20 | private String busiLineName; |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/homepage/vo/WorkOrderTrendRespVo.java
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/inspectionplan/InspectionPlanCommitController.java
| 1 | package com.zteits.urbanops.module.garden.controller.admin.inspectionplan; | 1 | package com.zteits.urbanops.module.garden.controller.admin.inspectionplan; |
| 2 | 2 | ||
| 3 | +import com.zteits.urbanops.framework.common.biz.system.permission.dto.DeptDataPermissionRespDTO; | ||
| 4 | +import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; | ||
| 5 | +import com.zteits.urbanops.module.system.api.permission.PermissionApi; | ||
| 3 | import org.springframework.web.bind.annotation.*; | 6 | import org.springframework.web.bind.annotation.*; |
| 4 | import jakarta.annotation.Resource; | 7 | import jakarta.annotation.Resource; |
| 5 | import org.springframework.validation.annotation.Validated; | 8 | import org.springframework.validation.annotation.Validated; |
| @@ -37,6 +40,9 @@ public class InspectionPlanCommitController { | @@ -37,6 +40,9 @@ public class InspectionPlanCommitController { | ||
| 37 | @Resource | 40 | @Resource |
| 38 | private InspectionPlanCommitService inspectionPlanCommitService; | 41 | private InspectionPlanCommitService inspectionPlanCommitService; |
| 39 | 42 | ||
| 43 | + @Resource | ||
| 44 | + private PermissionApi permissionApi; | ||
| 45 | + | ||
| 40 | @PostMapping("/create") | 46 | @PostMapping("/create") |
| 41 | @Operation(summary = "创建巡检计划提交明细") | 47 | @Operation(summary = "创建巡检计划提交明细") |
| 42 | @PreAuthorize("@ss.hasPermission('garden:inspection-plan-commit:create')") | 48 | @PreAuthorize("@ss.hasPermission('garden:inspection-plan-commit:create')") |
| @@ -83,6 +89,9 @@ public class InspectionPlanCommitController { | @@ -83,6 +89,9 @@ public class InspectionPlanCommitController { | ||
| 83 | @Operation(summary = "获得巡检计划提交明细分页") | 89 | @Operation(summary = "获得巡检计划提交明细分页") |
| 84 | @PreAuthorize("@ss.hasPermission('garden:inspection-plan-commit:query')") | 90 | @PreAuthorize("@ss.hasPermission('garden:inspection-plan-commit:query')") |
| 85 | public CommonResult<PageResult<InspectionPlanCommitRespVO>> getInspectionPlanCommitPage(@Valid InspectionPlanCommitPageReqVO pageReqVO) { | 91 | public CommonResult<PageResult<InspectionPlanCommitRespVO>> getInspectionPlanCommitPage(@Valid InspectionPlanCommitPageReqVO pageReqVO) { |
| 92 | + //获取登录人权限 | ||
| 93 | + DeptDataPermissionRespDTO deptDataPermission = permissionApi.getDeptDataPermission(SecurityFrameworkUtils.getLoginUserId()); | ||
| 94 | + pageReqVO.setDeptIds(deptDataPermission.getDeptIds()); | ||
| 86 | PageResult<InspectionPlanCommitRespVO> pageResult = inspectionPlanCommitService.getInspectionPlanCommitPage(pageReqVO); | 95 | PageResult<InspectionPlanCommitRespVO> pageResult = inspectionPlanCommitService.getInspectionPlanCommitPage(pageReqVO); |
| 87 | return success(BeanUtils.toBean(pageResult, InspectionPlanCommitRespVO.class)); | 96 | return success(BeanUtils.toBean(pageResult, InspectionPlanCommitRespVO.class)); |
| 88 | } | 97 | } |
| @@ -100,4 +109,4 @@ public class InspectionPlanCommitController { | @@ -100,4 +109,4 @@ public class InspectionPlanCommitController { | ||
| 100 | BeanUtils.toBean(list, InspectionPlanCommitRespVO.class)); | 109 | BeanUtils.toBean(list, InspectionPlanCommitRespVO.class)); |
| 101 | } | 110 | } |
| 102 | 111 | ||
| 103 | -} | ||
| 104 | \ No newline at end of file | 112 | \ No newline at end of file |
| 113 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/inspectionplan/InspectionPlanController.java
| 1 | package com.zteits.urbanops.module.garden.controller.admin.inspectionplan; | 1 | package com.zteits.urbanops.module.garden.controller.admin.inspectionplan; |
| 2 | 2 | ||
| 3 | import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; | 3 | import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; |
| 4 | +import com.zteits.urbanops.framework.common.biz.system.permission.dto.DeptDataPermissionRespDTO; | ||
| 4 | import com.zteits.urbanops.framework.common.pojo.CommonResult; | 5 | import com.zteits.urbanops.framework.common.pojo.CommonResult; |
| 5 | import com.zteits.urbanops.framework.common.pojo.PageParam; | 6 | import com.zteits.urbanops.framework.common.pojo.PageParam; |
| 6 | import com.zteits.urbanops.framework.common.pojo.PageResult; | 7 | import com.zteits.urbanops.framework.common.pojo.PageResult; |
| 7 | import com.zteits.urbanops.framework.common.util.object.BeanUtils; | 8 | import com.zteits.urbanops.framework.common.util.object.BeanUtils; |
| 9 | +import com.zteits.urbanops.framework.datapermission.core.annotation.DataPermission; | ||
| 8 | import com.zteits.urbanops.framework.datapermission.core.util.DataPermissionUtils; | 10 | import com.zteits.urbanops.framework.datapermission.core.util.DataPermissionUtils; |
| 9 | import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; | 11 | import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; |
| 10 | import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; | 12 | import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; |
| @@ -40,6 +42,7 @@ import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.PLAN_RA | @@ -40,6 +42,7 @@ import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.PLAN_RA | ||
| 40 | @RequestMapping("/garden/inspection-plan") | 42 | @RequestMapping("/garden/inspection-plan") |
| 41 | @Validated | 43 | @Validated |
| 42 | @Slf4j | 44 | @Slf4j |
| 45 | +@DataPermission(enable = false) | ||
| 43 | public class InspectionPlanController { | 46 | public class InspectionPlanController { |
| 44 | 47 | ||
| 45 | @Resource | 48 | @Resource |
| @@ -123,14 +126,22 @@ public class InspectionPlanController { | @@ -123,14 +126,22 @@ public class InspectionPlanController { | ||
| 123 | @Operation(summary = "获得巡检计划汇总分页") | 126 | @Operation(summary = "获得巡检计划汇总分页") |
| 124 | @PreAuthorize("@ss.hasPermission('garden:inspection-plan:query')") | 127 | @PreAuthorize("@ss.hasPermission('garden:inspection-plan:query')") |
| 125 | public CommonResult<PageResult<InspectionPlanRespVO>> getInspectionPlanPage(@Valid InspectionPlanPageReqVO pageReqVO) { | 128 | public CommonResult<PageResult<InspectionPlanRespVO>> getInspectionPlanPage(@Valid InspectionPlanPageReqVO pageReqVO) { |
| 126 | - Long loginUserId = SecurityFrameworkUtils.getLoginUserId(); | ||
| 127 | - if(pageReqVO.getCompanyId() == null){ | ||
| 128 | - if(permissionApi.hasAnyRoles(loginUserId, "super_admin")){ | ||
| 129 | - pageReqVO.setCompanyId( null); | ||
| 130 | - }else{ | ||
| 131 | - pageReqVO.setCompanyId(SecurityFrameworkUtils.getCompanyId()); | ||
| 132 | - } | ||
| 133 | - } | 129 | +// Long loginUserId = SecurityFrameworkUtils.getLoginUserId(); |
| 130 | +// if(pageReqVO.getCompanyId() == null){ | ||
| 131 | +// if(permissionApi.hasAnyRoles(loginUserId, "super_admin")){ | ||
| 132 | +// pageReqVO.setCompanyId( null); | ||
| 133 | +// }else{ | ||
| 134 | +// Long companyId = SecurityFrameworkUtils.getCompanyId(); | ||
| 135 | +// if(null == companyId || companyId == 0L || companyId == 100L){ | ||
| 136 | +// companyId = null; | ||
| 137 | +// } | ||
| 138 | +// pageReqVO.setCompanyId(companyId); | ||
| 139 | +// } | ||
| 140 | +// } | ||
| 141 | + | ||
| 142 | + //获取登录人权限 | ||
| 143 | + DeptDataPermissionRespDTO deptDataPermission = permissionApi.getDeptDataPermission(SecurityFrameworkUtils.getLoginUserId()); | ||
| 144 | + pageReqVO.setDeptIds(deptDataPermission.getDeptIds()); | ||
| 134 | PageResult<InspectionPlanRespVO> pageResult = inspectionPlanService.getInspectionPlanPage(pageReqVO); | 145 | PageResult<InspectionPlanRespVO> pageResult = inspectionPlanService.getInspectionPlanPage(pageReqVO); |
| 135 | return success(pageResult); | 146 | return success(pageResult); |
| 136 | } | 147 | } |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/inspectionplan/vo/InspectionPlanCommitPageReqVO.java
| @@ -4,6 +4,7 @@ import lombok.*; | @@ -4,6 +4,7 @@ import lombok.*; | ||
| 4 | 4 | ||
| 5 | import java.time.LocalDate; | 5 | import java.time.LocalDate; |
| 6 | import java.util.List; | 6 | import java.util.List; |
| 7 | +import java.util.Set; | ||
| 7 | 8 | ||
| 8 | import io.swagger.v3.oas.annotations.media.Schema; | 9 | import io.swagger.v3.oas.annotations.media.Schema; |
| 9 | import com.zteits.urbanops.framework.common.pojo.PageParam; | 10 | import com.zteits.urbanops.framework.common.pojo.PageParam; |
| @@ -71,4 +72,6 @@ public class InspectionPlanCommitPageReqVO extends PageParam { | @@ -71,4 +72,6 @@ public class InspectionPlanCommitPageReqVO extends PageParam { | ||
| 71 | @Schema(description = "创建结束时间") | 72 | @Schema(description = "创建结束时间") |
| 72 | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) | 73 | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| 73 | private LocalDate createTimeEnd; | 74 | private LocalDate createTimeEnd; |
| 74 | -} | ||
| 75 | \ No newline at end of file | 75 | \ No newline at end of file |
| 76 | + | ||
| 77 | + private Set<Long> deptIds; | ||
| 78 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/inspectionplan/vo/InspectionPlanPageReqVO.java
| @@ -5,6 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; | @@ -5,6 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; | ||
| 5 | import com.zteits.urbanops.framework.common.pojo.PageParam; | 5 | import com.zteits.urbanops.framework.common.pojo.PageParam; |
| 6 | import org.springframework.format.annotation.DateTimeFormat; | 6 | import org.springframework.format.annotation.DateTimeFormat; |
| 7 | import java.time.LocalDateTime; | 7 | import java.time.LocalDateTime; |
| 8 | +import java.util.Set; | ||
| 8 | 9 | ||
| 9 | import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | 10 | import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
| 10 | 11 | ||
| @@ -52,4 +53,5 @@ public class InspectionPlanPageReqVO extends PageParam { | @@ -52,4 +53,5 @@ public class InspectionPlanPageReqVO extends PageParam { | ||
| 52 | @Schema(description = "完成状态 : 1:未完成;2:已完成") | 53 | @Schema(description = "完成状态 : 1:未完成;2:已完成") |
| 53 | private Integer finishState; | 54 | private Integer finishState; |
| 54 | 55 | ||
| 55 | -} | ||
| 56 | \ No newline at end of file | 56 | \ No newline at end of file |
| 57 | + private Set<Long> deptIds; | ||
| 58 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/maintainplan/MaintainPlanCommitController.java
| 1 | package com.zteits.urbanops.module.garden.controller.admin.maintainplan; | 1 | package com.zteits.urbanops.module.garden.controller.admin.maintainplan; |
| 2 | 2 | ||
| 3 | +import com.zteits.urbanops.framework.common.biz.system.permission.dto.DeptDataPermissionRespDTO; | ||
| 4 | +import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; | ||
| 5 | +import com.zteits.urbanops.module.system.api.permission.PermissionApi; | ||
| 3 | import org.springframework.web.bind.annotation.*; | 6 | import org.springframework.web.bind.annotation.*; |
| 4 | import jakarta.annotation.Resource; | 7 | import jakarta.annotation.Resource; |
| 5 | import org.springframework.validation.annotation.Validated; | 8 | import org.springframework.validation.annotation.Validated; |
| @@ -37,6 +40,10 @@ public class MaintainPlanCommitController { | @@ -37,6 +40,10 @@ public class MaintainPlanCommitController { | ||
| 37 | @Resource | 40 | @Resource |
| 38 | private MaintainPlanCommitService maintainPlanCommitService; | 41 | private MaintainPlanCommitService maintainPlanCommitService; |
| 39 | 42 | ||
| 43 | + @Resource | ||
| 44 | + private PermissionApi permissionApi; | ||
| 45 | + | ||
| 46 | + | ||
| 40 | @PostMapping("/create") | 47 | @PostMapping("/create") |
| 41 | @Operation(summary = "创建养护计划明细") | 48 | @Operation(summary = "创建养护计划明细") |
| 42 | @PreAuthorize("@ss.hasPermission('garden:maintain-plan-commit:create')") | 49 | @PreAuthorize("@ss.hasPermission('garden:maintain-plan-commit:create')") |
| @@ -92,6 +99,9 @@ public class MaintainPlanCommitController { | @@ -92,6 +99,9 @@ public class MaintainPlanCommitController { | ||
| 92 | @Operation(summary = "获得养护计划明细分页") | 99 | @Operation(summary = "获得养护计划明细分页") |
| 93 | @PreAuthorize("@ss.hasPermission('garden:maintain-plan-commit:query')") | 100 | @PreAuthorize("@ss.hasPermission('garden:maintain-plan-commit:query')") |
| 94 | public CommonResult<PageResult<MaintainPlanCommitRespVO>> getMaintainPlanCommitPage(@Valid MaintainPlanCommitPageReqVO pageReqVO) { | 101 | public CommonResult<PageResult<MaintainPlanCommitRespVO>> getMaintainPlanCommitPage(@Valid MaintainPlanCommitPageReqVO pageReqVO) { |
| 102 | + //获取登录人权限 | ||
| 103 | + DeptDataPermissionRespDTO deptDataPermission = permissionApi.getDeptDataPermission(SecurityFrameworkUtils.getLoginUserId()); | ||
| 104 | + pageReqVO.setDeptIds(deptDataPermission.getDeptIds()); | ||
| 95 | PageResult<MaintainPlanCommitRespVO> pageResult = maintainPlanCommitService.getMaintainPlanCommitPage(pageReqVO); | 105 | PageResult<MaintainPlanCommitRespVO> pageResult = maintainPlanCommitService.getMaintainPlanCommitPage(pageReqVO); |
| 96 | return success(pageResult); | 106 | return success(pageResult); |
| 97 | } | 107 | } |
| @@ -109,4 +119,4 @@ public class MaintainPlanCommitController { | @@ -109,4 +119,4 @@ public class MaintainPlanCommitController { | ||
| 109 | BeanUtils.toBean(list, MaintainPlanCommitRespVO.class)); | 119 | BeanUtils.toBean(list, MaintainPlanCommitRespVO.class)); |
| 110 | } | 120 | } |
| 111 | 121 | ||
| 112 | -} | ||
| 113 | \ No newline at end of file | 122 | \ No newline at end of file |
| 123 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/maintainplan/MaintainPlanController.java
| 1 | package com.zteits.urbanops.module.garden.controller.admin.maintainplan; | 1 | package com.zteits.urbanops.module.garden.controller.admin.maintainplan; |
| 2 | 2 | ||
| 3 | import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; | 3 | import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; |
| 4 | +import com.zteits.urbanops.framework.common.biz.system.permission.dto.DeptDataPermissionRespDTO; | ||
| 4 | import com.zteits.urbanops.framework.common.pojo.CommonResult; | 5 | import com.zteits.urbanops.framework.common.pojo.CommonResult; |
| 5 | import com.zteits.urbanops.framework.common.pojo.PageParam; | 6 | import com.zteits.urbanops.framework.common.pojo.PageParam; |
| 6 | import com.zteits.urbanops.framework.common.pojo.PageResult; | 7 | import com.zteits.urbanops.framework.common.pojo.PageResult; |
| 7 | import com.zteits.urbanops.framework.common.util.object.BeanUtils; | 8 | import com.zteits.urbanops.framework.common.util.object.BeanUtils; |
| 9 | +import com.zteits.urbanops.framework.datapermission.core.annotation.DataPermission; | ||
| 8 | import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; | 10 | import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; |
| 9 | import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; | 11 | import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; |
| 10 | import com.zteits.urbanops.module.garden.controller.admin.maintainplan.vo.MaintainPlanPageReqVO; | 12 | import com.zteits.urbanops.module.garden.controller.admin.maintainplan.vo.MaintainPlanPageReqVO; |
| @@ -39,6 +41,7 @@ import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.PLAN_RA | @@ -39,6 +41,7 @@ import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.PLAN_RA | ||
| 39 | @RequestMapping("/garden/maintain-plan") | 41 | @RequestMapping("/garden/maintain-plan") |
| 40 | @Validated | 42 | @Validated |
| 41 | @Slf4j | 43 | @Slf4j |
| 44 | +@DataPermission(enable = false) | ||
| 42 | public class MaintainPlanController { | 45 | public class MaintainPlanController { |
| 43 | 46 | ||
| 44 | @Resource | 47 | @Resource |
| @@ -122,14 +125,21 @@ public class MaintainPlanController { | @@ -122,14 +125,21 @@ public class MaintainPlanController { | ||
| 122 | @Operation(summary = "获得养护计划汇总分页") | 125 | @Operation(summary = "获得养护计划汇总分页") |
| 123 | @PreAuthorize("@ss.hasPermission('garden:maintain-plan:query')") | 126 | @PreAuthorize("@ss.hasPermission('garden:maintain-plan:query')") |
| 124 | public CommonResult<PageResult<MaintainPlanRespVO>> getMaintainPlanPage(@Valid MaintainPlanPageReqVO pageReqVO) { | 127 | public CommonResult<PageResult<MaintainPlanRespVO>> getMaintainPlanPage(@Valid MaintainPlanPageReqVO pageReqVO) { |
| 125 | - if(pageReqVO.getCompanyId() == null){ | ||
| 126 | - Long loginUserId = SecurityFrameworkUtils.getLoginUserId(); | ||
| 127 | - if(permissionApi.hasAnyRoles(loginUserId, "super_admin")){ | ||
| 128 | - pageReqVO.setCompanyId( null); | ||
| 129 | - }else{ | ||
| 130 | - pageReqVO.setCompanyId(SecurityFrameworkUtils.getCompanyId()); | ||
| 131 | - } | ||
| 132 | - } | 128 | +// if(pageReqVO.getCompanyId() == null){ |
| 129 | +// Long loginUserId = SecurityFrameworkUtils.getLoginUserId(); | ||
| 130 | +// if(permissionApi.hasAnyRoles(loginUserId, "super_admin")){ | ||
| 131 | +// pageReqVO.setCompanyId( null); | ||
| 132 | +// }else{ | ||
| 133 | +// Long companyId = SecurityFrameworkUtils.getCompanyId(); | ||
| 134 | +// if(null == companyId || companyId == 0L || companyId == 100L){ | ||
| 135 | +// companyId = null; | ||
| 136 | +// } | ||
| 137 | +// pageReqVO.setCompanyId(companyId); | ||
| 138 | +// } | ||
| 139 | +// } | ||
| 140 | + //获取登录人权限 | ||
| 141 | + DeptDataPermissionRespDTO deptDataPermission = permissionApi.getDeptDataPermission(SecurityFrameworkUtils.getLoginUserId()); | ||
| 142 | + pageReqVO.setDeptIds(deptDataPermission.getDeptIds()); | ||
| 133 | PageResult<MaintainPlanRespVO> pageResult = maintainPlanService.getMaintainPlanPage(pageReqVO); | 143 | PageResult<MaintainPlanRespVO> pageResult = maintainPlanService.getMaintainPlanPage(pageReqVO); |
| 134 | return success(pageResult); | 144 | return success(pageResult); |
| 135 | } | 145 | } |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/maintainplan/vo/MaintainPlanCommitPageReqVO.java
| @@ -7,6 +7,7 @@ import io.swagger.v3.oas.annotations.media.Schema; | @@ -7,6 +7,7 @@ import io.swagger.v3.oas.annotations.media.Schema; | ||
| 7 | import com.zteits.urbanops.framework.common.pojo.PageParam; | 7 | import com.zteits.urbanops.framework.common.pojo.PageParam; |
| 8 | import org.springframework.format.annotation.DateTimeFormat; | 8 | import org.springframework.format.annotation.DateTimeFormat; |
| 9 | import java.util.List; | 9 | import java.util.List; |
| 10 | +import java.util.Set; | ||
| 10 | 11 | ||
| 11 | import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; | 12 | import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; |
| 12 | import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | 13 | import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
| @@ -68,4 +69,5 @@ public class MaintainPlanCommitPageReqVO extends PageParam { | @@ -68,4 +69,5 @@ public class MaintainPlanCommitPageReqVO extends PageParam { | ||
| 68 | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) | 69 | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| 69 | private LocalDate createTimeEnd; | 70 | private LocalDate createTimeEnd; |
| 70 | 71 | ||
| 72 | + private Set<Long> deptIds; | ||
| 71 | } | 73 | } |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/maintainplan/vo/MaintainPlanPageReqVO.java
| @@ -7,6 +7,7 @@ import io.swagger.v3.oas.annotations.media.Schema; | @@ -7,6 +7,7 @@ import io.swagger.v3.oas.annotations.media.Schema; | ||
| 7 | import com.zteits.urbanops.framework.common.pojo.PageParam; | 7 | import com.zteits.urbanops.framework.common.pojo.PageParam; |
| 8 | import org.springframework.format.annotation.DateTimeFormat; | 8 | import org.springframework.format.annotation.DateTimeFormat; |
| 9 | import java.time.LocalDateTime; | 9 | import java.time.LocalDateTime; |
| 10 | +import java.util.Set; | ||
| 10 | 11 | ||
| 11 | import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | 12 | import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
| 12 | 13 | ||
| @@ -53,4 +54,6 @@ public class MaintainPlanPageReqVO extends PageParam { | @@ -53,4 +54,6 @@ public class MaintainPlanPageReqVO extends PageParam { | ||
| 53 | @Schema(description = "完成状态 : 1:未完成;2:已完成") | 54 | @Schema(description = "完成状态 : 1:未完成;2:已完成") |
| 54 | private Integer finishState; | 55 | private Integer finishState; |
| 55 | 56 | ||
| 56 | -} | ||
| 57 | \ No newline at end of file | 57 | \ No newline at end of file |
| 58 | + private Set<Long> deptIds; | ||
| 59 | + | ||
| 60 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/material/vo/MaterialSaveReqVO.java
| @@ -69,7 +69,6 @@ public class MaterialSaveReqVO { | @@ -69,7 +69,6 @@ public class MaterialSaveReqVO { | ||
| 69 | private String unitName; | 69 | private String unitName; |
| 70 | 70 | ||
| 71 | @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "随便") | 71 | @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "随便") |
| 72 | - @NotEmpty(message = "备注不能为空") | ||
| 73 | private String remark; | 72 | private String remark; |
| 74 | 73 | ||
| 75 | @Schema(description = "是否关联工单:0-否,1-是") | 74 | @Schema(description = "是否关联工单:0-否,1-是") |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialinventory/vo/MaterialInventoryPageReqVO.java
| @@ -71,4 +71,6 @@ public class MaterialInventoryPageReqVO extends PageParam { | @@ -71,4 +71,6 @@ public class MaterialInventoryPageReqVO extends PageParam { | ||
| 71 | @Schema(description = "部门ID", example = "11349") | 71 | @Schema(description = "部门ID", example = "11349") |
| 72 | private Long deptId; | 72 | private Long deptId; |
| 73 | 73 | ||
| 74 | -} | ||
| 75 | \ No newline at end of file | 74 | \ No newline at end of file |
| 75 | + @Schema(description = "出库查询", example = "0") | ||
| 76 | + private Integer outInventoryQuery; | ||
| 77 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialinventoryout/vo/MaterialInventoryOutSaveReqVO.java
| @@ -13,6 +13,9 @@ public class MaterialInventoryOutSaveReqVO { | @@ -13,6 +13,9 @@ public class MaterialInventoryOutSaveReqVO { | ||
| 13 | 13 | ||
| 14 | @Schema(description = "入库ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18713") | 14 | @Schema(description = "入库ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18713") |
| 15 | private Long id; | 15 | private Long id; |
| 16 | + @Schema(description = "库存ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 17 | + @NotNull(message = "库存ID不能为空") | ||
| 18 | + private Long inventoryId; | ||
| 16 | 19 | ||
| 17 | @Schema(description = "物料ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14541") | 20 | @Schema(description = "物料ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14541") |
| 18 | @NotNull(message = "物料ID不能为空") | 21 | @NotNull(message = "物料ID不能为空") |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialname/MaterialNameController.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.materialname; | ||
| 2 | + | ||
| 3 | +import org.springframework.web.bind.annotation.*; | ||
| 4 | +import jakarta.annotation.Resource; | ||
| 5 | +import org.springframework.validation.annotation.Validated; | ||
| 6 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 7 | +import io.swagger.v3.oas.annotations.tags.Tag; | ||
| 8 | +import io.swagger.v3.oas.annotations.Parameter; | ||
| 9 | +import io.swagger.v3.oas.annotations.Operation; | ||
| 10 | + | ||
| 11 | +import jakarta.validation.constraints.*; | ||
| 12 | +import jakarta.validation.*; | ||
| 13 | +import jakarta.servlet.http.*; | ||
| 14 | +import java.util.*; | ||
| 15 | +import java.io.IOException; | ||
| 16 | + | ||
| 17 | +import com.zteits.urbanops.framework.common.pojo.PageParam; | ||
| 18 | +import com.zteits.urbanops.framework.common.pojo.PageResult; | ||
| 19 | +import com.zteits.urbanops.framework.common.pojo.CommonResult; | ||
| 20 | +import com.zteits.urbanops.framework.common.util.object.BeanUtils; | ||
| 21 | +import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; | ||
| 22 | + | ||
| 23 | +import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; | ||
| 24 | + | ||
| 25 | +import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; | ||
| 26 | +import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*; | ||
| 27 | + | ||
| 28 | +import com.zteits.urbanops.module.garden.controller.admin.materialname.vo.*; | ||
| 29 | +import com.zteits.urbanops.module.garden.dal.dataobject.materialname.MaterialNameDO; | ||
| 30 | +import com.zteits.urbanops.module.garden.service.materialname.MaterialNameService; | ||
| 31 | + | ||
| 32 | +@Tag(name = "管理后台 - 物料名称") | ||
| 33 | +@RestController | ||
| 34 | +@RequestMapping("/garden/material-name") | ||
| 35 | +@Validated | ||
| 36 | +public class MaterialNameController { | ||
| 37 | + | ||
| 38 | + @Resource | ||
| 39 | + private MaterialNameService materialNameService; | ||
| 40 | + | ||
| 41 | + @PostMapping("/create") | ||
| 42 | + @Operation(summary = "创建物料名称") | ||
| 43 | + @PreAuthorize("@ss.hasPermission('garden:material-name:create')") | ||
| 44 | + public CommonResult<Long> createMaterialName(@Valid @RequestBody MaterialNameSaveReqVO createReqVO) { | ||
| 45 | + return success(materialNameService.createMaterialName(createReqVO)); | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + @PutMapping("/update") | ||
| 49 | + @Operation(summary = "更新物料名称") | ||
| 50 | + @PreAuthorize("@ss.hasPermission('garden:material-name:update')") | ||
| 51 | + public CommonResult<Boolean> updateMaterialName(@Valid @RequestBody MaterialNameSaveReqVO updateReqVO) { | ||
| 52 | + materialNameService.updateMaterialName(updateReqVO); | ||
| 53 | + return success(true); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + @DeleteMapping("/delete") | ||
| 57 | + @Operation(summary = "删除物料名称") | ||
| 58 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 59 | + @PreAuthorize("@ss.hasPermission('garden:material-name:delete')") | ||
| 60 | + public CommonResult<Boolean> deleteMaterialName(@RequestParam("id") Long id) { | ||
| 61 | + materialNameService.deleteMaterialName(id); | ||
| 62 | + return success(true); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + @DeleteMapping("/delete-list") | ||
| 66 | + @Parameter(name = "ids", description = "编号", required = true) | ||
| 67 | + @Operation(summary = "批量删除物料名称") | ||
| 68 | + @PreAuthorize("@ss.hasPermission('garden:material-name:delete')") | ||
| 69 | + public CommonResult<Boolean> deleteMaterialNameList(@RequestParam("ids") List<Long> ids) { | ||
| 70 | + materialNameService.deleteMaterialNameListByIds(ids); | ||
| 71 | + return success(true); | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + @GetMapping("/get") | ||
| 75 | + @Operation(summary = "获得物料名称") | ||
| 76 | + @Parameter(name = "id", description = "编号", required = true, example = "1024") | ||
| 77 | + @PreAuthorize("@ss.hasPermission('garden:material-name:query')") | ||
| 78 | + public CommonResult<MaterialNameRespVO> getMaterialName(@RequestParam("id") Long id) { | ||
| 79 | + MaterialNameDO materialName = materialNameService.getMaterialName(id); | ||
| 80 | + return success(BeanUtils.toBean(materialName, MaterialNameRespVO.class)); | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + @GetMapping("/page") | ||
| 84 | + @Operation(summary = "获得物料名称分页") | ||
| 85 | + @PreAuthorize("@ss.hasPermission('garden:material-name:query')") | ||
| 86 | + public CommonResult<PageResult<MaterialNameRespVO>> getMaterialNamePage(@Valid MaterialNamePageReqVO pageReqVO) { | ||
| 87 | + PageResult<MaterialNameDO> pageResult = materialNameService.getMaterialNamePage(pageReqVO); | ||
| 88 | + return success(BeanUtils.toBean(pageResult, MaterialNameRespVO.class)); | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + @GetMapping("/list") | ||
| 92 | + @Operation(summary = "获得物料名称列表(支持模糊搜索)") | ||
| 93 | + @PreAuthorize("@ss.hasPermission('garden:material-name:query')") | ||
| 94 | + public CommonResult<List<MaterialNameRespVO>> getMaterialNameList( | ||
| 95 | + @RequestParam(value = "materialName", required = false) String materialName) { | ||
| 96 | + // 构建查询条件 | ||
| 97 | + MaterialNamePageReqVO pageReqVO = new MaterialNamePageReqVO(); | ||
| 98 | + pageReqVO.setMaterialName(materialName); | ||
| 99 | + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | ||
| 100 | + | ||
| 101 | + // 查询数据 | ||
| 102 | + List<MaterialNameDO> list = materialNameService.getMaterialNamePage(pageReqVO).getList(); | ||
| 103 | + return success(BeanUtils.toBean(list, MaterialNameRespVO.class)); | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + @GetMapping("/export-excel") | ||
| 107 | + @Operation(summary = "导出物料名称 Excel") | ||
| 108 | + @PreAuthorize("@ss.hasPermission('garden:material-name:export')") | ||
| 109 | + @ApiAccessLog(operateType = EXPORT) | ||
| 110 | + public void exportMaterialNameExcel(@Valid MaterialNamePageReqVO pageReqVO, | ||
| 111 | + HttpServletResponse response) throws IOException { | ||
| 112 | + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | ||
| 113 | + List<MaterialNameDO> list = materialNameService.getMaterialNamePage(pageReqVO).getList(); | ||
| 114 | + // 导出 Excel | ||
| 115 | + ExcelUtils.write(response, "物料名称.xls", "数据", MaterialNameRespVO.class, | ||
| 116 | + BeanUtils.toBean(list, MaterialNameRespVO.class)); | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | +} | ||
| 0 | \ No newline at end of file | 120 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialname/vo/MaterialNamePageReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.materialname.vo; | ||
| 2 | + | ||
| 3 | +import lombok.*; | ||
| 4 | +import java.util.*; | ||
| 5 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 6 | +import com.zteits.urbanops.framework.common.pojo.PageParam; | ||
| 7 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 8 | +import java.time.LocalDateTime; | ||
| 9 | + | ||
| 10 | +import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 11 | + | ||
| 12 | +@Schema(description = "管理后台 - 物料名称分页 Request VO") | ||
| 13 | +@Data | ||
| 14 | +public class MaterialNamePageReqVO extends PageParam { | ||
| 15 | + | ||
| 16 | + @Schema(description = "物料名称ID", example = "14631") | ||
| 17 | + private Long materialId; | ||
| 18 | + | ||
| 19 | + @Schema(description = "物料名称", example = "张三") | ||
| 20 | + private String materialName; | ||
| 21 | + | ||
| 22 | + @Schema(description = "备注", example = "你猜") | ||
| 23 | + private String remark; | ||
| 24 | + | ||
| 25 | + @Schema(description = "创建时间") | ||
| 26 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 27 | + private LocalDateTime[] createTime; | ||
| 28 | + | ||
| 29 | + @Schema(description = "部门ID", example = "23084") | ||
| 30 | + private Long deptId; | ||
| 31 | + | ||
| 32 | +} | ||
| 0 | \ No newline at end of file | 33 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialname/vo/MaterialNameRespVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.materialname.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.*; | ||
| 5 | +import java.util.*; | ||
| 6 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 7 | +import java.time.LocalDateTime; | ||
| 8 | +import cn.idev.excel.annotation.*; | ||
| 9 | + | ||
| 10 | +@Schema(description = "管理后台 - 物料名称 Response VO") | ||
| 11 | +@Data | ||
| 12 | +@ExcelIgnoreUnannotated | ||
| 13 | +public class MaterialNameRespVO { | ||
| 14 | + | ||
| 15 | + @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "32592") | ||
| 16 | + @ExcelProperty("自增主键") | ||
| 17 | + private Long id; | ||
| 18 | + | ||
| 19 | + @Schema(description = "物料名称ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14631") | ||
| 20 | + @ExcelProperty("物料名称ID") | ||
| 21 | + private Long materialId; | ||
| 22 | + | ||
| 23 | + @Schema(description = "物料名称", example = "张三") | ||
| 24 | + @ExcelProperty("物料名称") | ||
| 25 | + private String materialName; | ||
| 26 | + | ||
| 27 | + @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你猜") | ||
| 28 | + @ExcelProperty("备注") | ||
| 29 | + private String remark; | ||
| 30 | + | ||
| 31 | + @Schema(description = "创建时间") | ||
| 32 | + @ExcelProperty("创建时间") | ||
| 33 | + private LocalDateTime createTime; | ||
| 34 | + | ||
| 35 | + @Schema(description = "部门ID", example = "23084") | ||
| 36 | + @ExcelProperty("部门ID") | ||
| 37 | + private Long deptId; | ||
| 38 | + | ||
| 39 | +} | ||
| 0 | \ No newline at end of file | 40 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialname/vo/MaterialNameSaveReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.materialname.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.*; | ||
| 5 | +import java.util.*; | ||
| 6 | +import jakarta.validation.constraints.*; | ||
| 7 | + | ||
| 8 | +@Schema(description = "管理后台 - 物料名称新增/修改 Request VO") | ||
| 9 | +@Data | ||
| 10 | +public class MaterialNameSaveReqVO { | ||
| 11 | + | ||
| 12 | + @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "32592") | ||
| 13 | + private Long id; | ||
| 14 | + | ||
| 15 | + @Schema(description = "物料名称ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14631") | ||
| 16 | + private Long materialId; | ||
| 17 | + | ||
| 18 | + @NotEmpty(message = "物料名称不能为空") | ||
| 19 | + @Schema(description = "物料名称", example = "张三") | ||
| 20 | + private String materialName; | ||
| 21 | + | ||
| 22 | + @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你猜") | ||
| 23 | + private String remark; | ||
| 24 | + | ||
| 25 | + @Schema(description = "部门ID", example = "23084") | ||
| 26 | + private Long deptId; | ||
| 27 | + | ||
| 28 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialspecification/MaterialSpecificationController.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.materialspecification; | ||
| 2 | + | ||
| 3 | +import org.springframework.web.bind.annotation.*; | ||
| 4 | +import jakarta.annotation.Resource; | ||
| 5 | +import org.springframework.validation.annotation.Validated; | ||
| 6 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 7 | +import io.swagger.v3.oas.annotations.tags.Tag; | ||
| 8 | +import io.swagger.v3.oas.annotations.Parameter; | ||
| 9 | +import io.swagger.v3.oas.annotations.Operation; | ||
| 10 | + | ||
| 11 | +import jakarta.validation.constraints.*; | ||
| 12 | +import jakarta.validation.*; | ||
| 13 | +import jakarta.servlet.http.*; | ||
| 14 | +import java.util.*; | ||
| 15 | +import java.io.IOException; | ||
| 16 | + | ||
| 17 | +import com.zteits.urbanops.framework.common.pojo.PageParam; | ||
| 18 | +import com.zteits.urbanops.framework.common.pojo.PageResult; | ||
| 19 | +import com.zteits.urbanops.framework.common.pojo.CommonResult; | ||
| 20 | +import com.zteits.urbanops.framework.common.util.object.BeanUtils; | ||
| 21 | +import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; | ||
| 22 | + | ||
| 23 | +import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; | ||
| 24 | + | ||
| 25 | +import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; | ||
| 26 | +import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*; | ||
| 27 | + | ||
| 28 | +import com.zteits.urbanops.module.garden.controller.admin.materialspecification.vo.*; | ||
| 29 | +import com.zteits.urbanops.module.garden.dal.dataobject.materialspecification.MaterialSpecificationDO; | ||
| 30 | +import com.zteits.urbanops.module.garden.service.materialspecification.MaterialSpecificationService; | ||
| 31 | + | ||
| 32 | +@Tag(name = "管理后台 - 物料规格") | ||
| 33 | +@RestController | ||
| 34 | +@RequestMapping("/garden/material-specification") | ||
| 35 | +@Validated | ||
| 36 | +public class MaterialSpecificationController { | ||
| 37 | + | ||
| 38 | + @Resource | ||
| 39 | + private MaterialSpecificationService materialSpecificationService; | ||
| 40 | + | ||
| 41 | + @PostMapping("/create") | ||
| 42 | + @Operation(summary = "创建物料规格") | ||
| 43 | + @PreAuthorize("@ss.hasPermission('garden:material-specification:create')") | ||
| 44 | + public CommonResult<Long> createMaterialSpecification(@Valid @RequestBody MaterialSpecificationSaveReqVO createReqVO) { | ||
| 45 | + return success(materialSpecificationService.createMaterialSpecification(createReqVO)); | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + @PutMapping("/update") | ||
| 49 | + @Operation(summary = "更新物料规格") | ||
| 50 | + @PreAuthorize("@ss.hasPermission('garden:material-specification:update')") | ||
| 51 | + public CommonResult<Boolean> updateMaterialSpecification(@Valid @RequestBody MaterialSpecificationSaveReqVO updateReqVO) { | ||
| 52 | + materialSpecificationService.updateMaterialSpecification(updateReqVO); | ||
| 53 | + return success(true); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + @DeleteMapping("/delete") | ||
| 57 | + @Operation(summary = "删除物料规格") | ||
| 58 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 59 | + @PreAuthorize("@ss.hasPermission('garden:material-specification:delete')") | ||
| 60 | + public CommonResult<Boolean> deleteMaterialSpecification(@RequestParam("id") Long id) { | ||
| 61 | + materialSpecificationService.deleteMaterialSpecification(id); | ||
| 62 | + return success(true); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + @DeleteMapping("/delete-list") | ||
| 66 | + @Parameter(name = "ids", description = "编号", required = true) | ||
| 67 | + @Operation(summary = "批量删除物料规格") | ||
| 68 | + @PreAuthorize("@ss.hasPermission('garden:material-specification:delete')") | ||
| 69 | + public CommonResult<Boolean> deleteMaterialSpecificationList(@RequestParam("ids") List<Long> ids) { | ||
| 70 | + materialSpecificationService.deleteMaterialSpecificationListByIds(ids); | ||
| 71 | + return success(true); | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + @GetMapping("/get") | ||
| 75 | + @Operation(summary = "获得物料规格") | ||
| 76 | + @Parameter(name = "id", description = "编号", required = true, example = "1024") | ||
| 77 | + @PreAuthorize("@ss.hasPermission('garden:material-specification:query')") | ||
| 78 | + public CommonResult<MaterialSpecificationRespVO> getMaterialSpecification(@RequestParam("id") Long id) { | ||
| 79 | + MaterialSpecificationDO materialSpecification = materialSpecificationService.getMaterialSpecification(id); | ||
| 80 | + return success(BeanUtils.toBean(materialSpecification, MaterialSpecificationRespVO.class)); | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + @GetMapping("/page") | ||
| 84 | + @Operation(summary = "获得物料规格分页") | ||
| 85 | + @PreAuthorize("@ss.hasPermission('garden:material-specification:query')") | ||
| 86 | + public CommonResult<PageResult<MaterialSpecificationRespVO>> getMaterialSpecificationPage(@Valid MaterialSpecificationPageReqVO pageReqVO) { | ||
| 87 | + PageResult<MaterialSpecificationDO> pageResult = materialSpecificationService.getMaterialSpecificationPage(pageReqVO); | ||
| 88 | + return success(BeanUtils.toBean(pageResult, MaterialSpecificationRespVO.class)); | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + @GetMapping("/list") | ||
| 92 | + @Operation(summary = "获得物料规格列表(支持模糊搜索)") | ||
| 93 | + @PreAuthorize("@ss.hasPermission('garden:material-specification:query')") | ||
| 94 | + public CommonResult<List<MaterialSpecificationRespVO>> getMaterialSpecificationList( | ||
| 95 | + @RequestParam(value = "specifications", required = false) String specifications) { | ||
| 96 | + // 构建查询条件 | ||
| 97 | + MaterialSpecificationPageReqVO pageReqVO = new MaterialSpecificationPageReqVO(); | ||
| 98 | + pageReqVO.setSpecifications(specifications); | ||
| 99 | + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | ||
| 100 | + | ||
| 101 | + // 查询数据 | ||
| 102 | + List<MaterialSpecificationDO> list = materialSpecificationService.getMaterialSpecificationPage(pageReqVO).getList(); | ||
| 103 | + return success(BeanUtils.toBean(list, MaterialSpecificationRespVO.class)); | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + @GetMapping("/export-excel") | ||
| 107 | + @Operation(summary = "导出物料规格 Excel") | ||
| 108 | + @PreAuthorize("@ss.hasPermission('garden:material-specification:export')") | ||
| 109 | + @ApiAccessLog(operateType = EXPORT) | ||
| 110 | + public void exportMaterialSpecificationExcel(@Valid MaterialSpecificationPageReqVO pageReqVO, | ||
| 111 | + HttpServletResponse response) throws IOException { | ||
| 112 | + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | ||
| 113 | + List<MaterialSpecificationDO> list = materialSpecificationService.getMaterialSpecificationPage(pageReqVO).getList(); | ||
| 114 | + // 导出 Excel | ||
| 115 | + ExcelUtils.write(response, "物料规格.xls", "数据", MaterialSpecificationRespVO.class, | ||
| 116 | + BeanUtils.toBean(list, MaterialSpecificationRespVO.class)); | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | +} | ||
| 0 | \ No newline at end of file | 120 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialspecification/vo/MaterialSpecificationPageReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.materialspecification.vo; | ||
| 2 | + | ||
| 3 | +import lombok.*; | ||
| 4 | +import java.util.*; | ||
| 5 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 6 | +import com.zteits.urbanops.framework.common.pojo.PageParam; | ||
| 7 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 8 | +import java.time.LocalDateTime; | ||
| 9 | + | ||
| 10 | +import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 11 | + | ||
| 12 | +@Schema(description = "管理后台 - 物料规格分页 Request VO") | ||
| 13 | +@Data | ||
| 14 | +public class MaterialSpecificationPageReqVO extends PageParam { | ||
| 15 | + | ||
| 16 | + @Schema(description = "规格编码") | ||
| 17 | + private String specCode; | ||
| 18 | + | ||
| 19 | + @Schema(description = "规格名称") | ||
| 20 | + private String specifications; | ||
| 21 | + | ||
| 22 | + @Schema(description = "备注", example = "你猜") | ||
| 23 | + private String remark; | ||
| 24 | + | ||
| 25 | + @Schema(description = "创建时间") | ||
| 26 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 27 | + private LocalDateTime[] createTime; | ||
| 28 | + | ||
| 29 | + @Schema(description = "部门ID", example = "18158") | ||
| 30 | + private Long deptId; | ||
| 31 | + | ||
| 32 | +} | ||
| 0 | \ No newline at end of file | 33 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialspecification/vo/MaterialSpecificationRespVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.materialspecification.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.*; | ||
| 5 | +import java.util.*; | ||
| 6 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 7 | +import java.time.LocalDateTime; | ||
| 8 | +import cn.idev.excel.annotation.*; | ||
| 9 | + | ||
| 10 | +@Schema(description = "管理后台 - 物料规格 Response VO") | ||
| 11 | +@Data | ||
| 12 | +@ExcelIgnoreUnannotated | ||
| 13 | +public class MaterialSpecificationRespVO { | ||
| 14 | + | ||
| 15 | + @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "15081") | ||
| 16 | + @ExcelProperty("自增主键") | ||
| 17 | + private Long id; | ||
| 18 | + | ||
| 19 | + @Schema(description = "规格编码") | ||
| 20 | + @ExcelProperty("规格编码") | ||
| 21 | + private String specCode; | ||
| 22 | + | ||
| 23 | + @Schema(description = "规格名称", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 24 | + @ExcelProperty("规格名称") | ||
| 25 | + private String specifications; | ||
| 26 | + | ||
| 27 | + @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你猜") | ||
| 28 | + @ExcelProperty("备注") | ||
| 29 | + private String remark; | ||
| 30 | + | ||
| 31 | + @Schema(description = "创建时间") | ||
| 32 | + @ExcelProperty("创建时间") | ||
| 33 | + private LocalDateTime createTime; | ||
| 34 | + | ||
| 35 | + @Schema(description = "部门ID", example = "18158") | ||
| 36 | + @ExcelProperty("部门ID") | ||
| 37 | + private Long deptId; | ||
| 38 | + | ||
| 39 | +} | ||
| 0 | \ No newline at end of file | 40 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialspecification/vo/MaterialSpecificationSaveReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.materialspecification.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.*; | ||
| 5 | +import java.util.*; | ||
| 6 | +import jakarta.validation.constraints.*; | ||
| 7 | + | ||
| 8 | +@Schema(description = "管理后台 - 物料规格新增/修改 Request VO") | ||
| 9 | +@Data | ||
| 10 | +public class MaterialSpecificationSaveReqVO { | ||
| 11 | + | ||
| 12 | + @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "15081") | ||
| 13 | + private Long id; | ||
| 14 | + | ||
| 15 | + @Schema(description = "规格编码") | ||
| 16 | + private String specCode; | ||
| 17 | + | ||
| 18 | + @Schema(description = "规格名称", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 19 | + @NotEmpty(message = "规格名称不能为空") | ||
| 20 | + private String specifications; | ||
| 21 | + | ||
| 22 | + @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你猜") | ||
| 23 | + private String remark; | ||
| 24 | + | ||
| 25 | + @Schema(description = "部门ID", example = "18158") | ||
| 26 | + private Long deptId; | ||
| 27 | + | ||
| 28 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialunit/MaterialUnitController.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.materialunit; | ||
| 2 | + | ||
| 3 | +import org.springframework.web.bind.annotation.*; | ||
| 4 | +import jakarta.annotation.Resource; | ||
| 5 | +import org.springframework.validation.annotation.Validated; | ||
| 6 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 7 | +import io.swagger.v3.oas.annotations.tags.Tag; | ||
| 8 | +import io.swagger.v3.oas.annotations.Parameter; | ||
| 9 | +import io.swagger.v3.oas.annotations.Operation; | ||
| 10 | + | ||
| 11 | +import jakarta.validation.constraints.*; | ||
| 12 | +import jakarta.validation.*; | ||
| 13 | +import jakarta.servlet.http.*; | ||
| 14 | +import java.util.*; | ||
| 15 | +import java.io.IOException; | ||
| 16 | + | ||
| 17 | +import com.zteits.urbanops.framework.common.pojo.PageParam; | ||
| 18 | +import com.zteits.urbanops.framework.common.pojo.PageResult; | ||
| 19 | +import com.zteits.urbanops.framework.common.pojo.CommonResult; | ||
| 20 | +import com.zteits.urbanops.framework.common.util.object.BeanUtils; | ||
| 21 | +import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; | ||
| 22 | + | ||
| 23 | +import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; | ||
| 24 | + | ||
| 25 | +import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; | ||
| 26 | +import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*; | ||
| 27 | + | ||
| 28 | +import com.zteits.urbanops.module.garden.controller.admin.materialunit.vo.*; | ||
| 29 | +import com.zteits.urbanops.module.garden.dal.dataobject.materialunit.MaterialUnitDO; | ||
| 30 | +import com.zteits.urbanops.module.garden.service.materialunit.MaterialUnitService; | ||
| 31 | + | ||
| 32 | +@Tag(name = "管理后台 - 物料单位") | ||
| 33 | +@RestController | ||
| 34 | +@RequestMapping("/garden/material-unit") | ||
| 35 | +@Validated | ||
| 36 | +public class MaterialUnitController { | ||
| 37 | + | ||
| 38 | + @Resource | ||
| 39 | + private MaterialUnitService materialUnitService; | ||
| 40 | + | ||
| 41 | + @PostMapping("/create") | ||
| 42 | + @Operation(summary = "创建物料单位") | ||
| 43 | + @PreAuthorize("@ss.hasPermission('garden:material-unit:create')") | ||
| 44 | + public CommonResult<Long> createMaterialUnit(@Valid @RequestBody MaterialUnitSaveReqVO createReqVO) { | ||
| 45 | + return success(materialUnitService.createMaterialUnit(createReqVO)); | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + @PutMapping("/update") | ||
| 49 | + @Operation(summary = "更新物料单位") | ||
| 50 | + @PreAuthorize("@ss.hasPermission('garden:material-unit:update')") | ||
| 51 | + public CommonResult<Boolean> updateMaterialUnit(@Valid @RequestBody MaterialUnitSaveReqVO updateReqVO) { | ||
| 52 | + materialUnitService.updateMaterialUnit(updateReqVO); | ||
| 53 | + return success(true); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + @DeleteMapping("/delete") | ||
| 57 | + @Operation(summary = "删除物料单位") | ||
| 58 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 59 | + @PreAuthorize("@ss.hasPermission('garden:material-unit:delete')") | ||
| 60 | + public CommonResult<Boolean> deleteMaterialUnit(@RequestParam("id") Long id) { | ||
| 61 | + materialUnitService.deleteMaterialUnit(id); | ||
| 62 | + return success(true); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + @DeleteMapping("/delete-list") | ||
| 66 | + @Parameter(name = "ids", description = "编号", required = true) | ||
| 67 | + @Operation(summary = "批量删除物料单位") | ||
| 68 | + @PreAuthorize("@ss.hasPermission('garden:material-unit:delete')") | ||
| 69 | + public CommonResult<Boolean> deleteMaterialUnitList(@RequestParam("ids") List<Long> ids) { | ||
| 70 | + materialUnitService.deleteMaterialUnitListByIds(ids); | ||
| 71 | + return success(true); | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + @GetMapping("/get") | ||
| 75 | + @Operation(summary = "获得物料单位") | ||
| 76 | + @Parameter(name = "id", description = "编号", required = true, example = "1024") | ||
| 77 | + @PreAuthorize("@ss.hasPermission('garden:material-unit:query')") | ||
| 78 | + public CommonResult<MaterialUnitRespVO> getMaterialUnit(@RequestParam("id") Long id) { | ||
| 79 | + MaterialUnitDO materialUnit = materialUnitService.getMaterialUnit(id); | ||
| 80 | + return success(BeanUtils.toBean(materialUnit, MaterialUnitRespVO.class)); | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + @GetMapping("/page") | ||
| 84 | + @Operation(summary = "获得物料单位分页") | ||
| 85 | + @PreAuthorize("@ss.hasPermission('garden:material-unit:query')") | ||
| 86 | + public CommonResult<PageResult<MaterialUnitRespVO>> getMaterialUnitPage(@Valid MaterialUnitPageReqVO pageReqVO) { | ||
| 87 | + PageResult<MaterialUnitDO> pageResult = materialUnitService.getMaterialUnitPage(pageReqVO); | ||
| 88 | + return success(BeanUtils.toBean(pageResult, MaterialUnitRespVO.class)); | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + @GetMapping("/list") | ||
| 92 | + @Operation(summary = "获得物料单位列表(支持模糊搜索)") | ||
| 93 | + @PreAuthorize("@ss.hasPermission('garden:material-unit:query')") | ||
| 94 | + public CommonResult<List<MaterialUnitRespVO>> getMaterialUnitList( | ||
| 95 | + @RequestParam(value = "unitName", required = false) String unitName) { | ||
| 96 | + // 构建查询条件 | ||
| 97 | + MaterialUnitPageReqVO pageReqVO = new MaterialUnitPageReqVO(); | ||
| 98 | + pageReqVO.setUnitName(unitName); | ||
| 99 | + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | ||
| 100 | + | ||
| 101 | + // 查询数据 | ||
| 102 | + List<MaterialUnitDO> list = materialUnitService.getMaterialUnitPage(pageReqVO).getList(); | ||
| 103 | + return success(BeanUtils.toBean(list, MaterialUnitRespVO.class)); | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + @GetMapping("/export-excel") | ||
| 107 | + @Operation(summary = "导出物料单位 Excel") | ||
| 108 | + @PreAuthorize("@ss.hasPermission('garden:material-unit:export')") | ||
| 109 | + @ApiAccessLog(operateType = EXPORT) | ||
| 110 | + public void exportMaterialUnitExcel(@Valid MaterialUnitPageReqVO pageReqVO, | ||
| 111 | + HttpServletResponse response) throws IOException { | ||
| 112 | + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | ||
| 113 | + List<MaterialUnitDO> list = materialUnitService.getMaterialUnitPage(pageReqVO).getList(); | ||
| 114 | + // 导出 Excel | ||
| 115 | + ExcelUtils.write(response, "物料单位.xls", "数据", MaterialUnitRespVO.class, | ||
| 116 | + BeanUtils.toBean(list, MaterialUnitRespVO.class)); | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | +} | ||
| 0 | \ No newline at end of file | 120 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialunit/vo/MaterialUnitPageReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.materialunit.vo; | ||
| 2 | + | ||
| 3 | +import lombok.*; | ||
| 4 | +import java.util.*; | ||
| 5 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 6 | +import com.zteits.urbanops.framework.common.pojo.PageParam; | ||
| 7 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 8 | +import java.time.LocalDateTime; | ||
| 9 | + | ||
| 10 | +import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 11 | + | ||
| 12 | +@Schema(description = "管理后台 - 物料单位分页 Request VO") | ||
| 13 | +@Data | ||
| 14 | +public class MaterialUnitPageReqVO extends PageParam { | ||
| 15 | + | ||
| 16 | + @Schema(description = "单位ID", example = "22342") | ||
| 17 | + private Long unitId; | ||
| 18 | + | ||
| 19 | + @Schema(description = "单位名称", example = "张三") | ||
| 20 | + private String unitName; | ||
| 21 | + | ||
| 22 | + @Schema(description = "备注", example = "你说的对") | ||
| 23 | + private String remark; | ||
| 24 | + | ||
| 25 | + @Schema(description = "创建时间") | ||
| 26 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 27 | + private LocalDateTime[] createTime; | ||
| 28 | + | ||
| 29 | + @Schema(description = "部门ID", example = "8809") | ||
| 30 | + private Long deptId; | ||
| 31 | + | ||
| 32 | +} | ||
| 0 | \ No newline at end of file | 33 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialunit/vo/MaterialUnitRespVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.materialunit.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.*; | ||
| 5 | +import java.util.*; | ||
| 6 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 7 | +import java.time.LocalDateTime; | ||
| 8 | +import cn.idev.excel.annotation.*; | ||
| 9 | + | ||
| 10 | +@Schema(description = "管理后台 - 物料单位 Response VO") | ||
| 11 | +@Data | ||
| 12 | +@ExcelIgnoreUnannotated | ||
| 13 | +public class MaterialUnitRespVO { | ||
| 14 | + | ||
| 15 | + @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "8413") | ||
| 16 | + @ExcelProperty("自增主键") | ||
| 17 | + private Long id; | ||
| 18 | + | ||
| 19 | + @Schema(description = "单位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "22342") | ||
| 20 | + @ExcelProperty("单位ID") | ||
| 21 | + private Long unitId; | ||
| 22 | + | ||
| 23 | + @Schema(description = "单位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") | ||
| 24 | + @ExcelProperty("单位名称") | ||
| 25 | + private String unitName; | ||
| 26 | + | ||
| 27 | + @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对") | ||
| 28 | + @ExcelProperty("备注") | ||
| 29 | + private String remark; | ||
| 30 | + | ||
| 31 | + @Schema(description = "创建时间") | ||
| 32 | + @ExcelProperty("创建时间") | ||
| 33 | + private LocalDateTime createTime; | ||
| 34 | + | ||
| 35 | + @Schema(description = "部门ID", example = "8809") | ||
| 36 | + @ExcelProperty("部门ID") | ||
| 37 | + private Long deptId; | ||
| 38 | + | ||
| 39 | +} | ||
| 0 | \ No newline at end of file | 40 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialunit/vo/MaterialUnitSaveReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.materialunit.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.*; | ||
| 5 | +import java.util.*; | ||
| 6 | +import jakarta.validation.constraints.*; | ||
| 7 | + | ||
| 8 | +@Schema(description = "管理后台 - 物料单位新增/修改 Request VO") | ||
| 9 | +@Data | ||
| 10 | +public class MaterialUnitSaveReqVO { | ||
| 11 | + | ||
| 12 | + @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "8413") | ||
| 13 | + private Long id; | ||
| 14 | + | ||
| 15 | + @Schema(description = "单位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "22342") | ||
| 16 | + private Long unitId; | ||
| 17 | + | ||
| 18 | + @Schema(description = "单位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") | ||
| 19 | + @NotEmpty(message = "单位名称不能为空") | ||
| 20 | + private String unitName; | ||
| 21 | + | ||
| 22 | + @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对") | ||
| 23 | + private String remark; | ||
| 24 | + | ||
| 25 | + @Schema(description = "部门ID", example = "8809") | ||
| 26 | + private Long deptId; | ||
| 27 | + | ||
| 28 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/mechanicalcost/vo/MechanicalCostPageReqVO.java
| 1 | package com.zteits.urbanops.module.garden.controller.admin.mechanicalcost.vo; | 1 | package com.zteits.urbanops.module.garden.controller.admin.mechanicalcost.vo; |
| 2 | 2 | ||
| 3 | +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; | ||
| 4 | +import com.fasterxml.jackson.annotation.JsonFormat; | ||
| 3 | import com.zteits.urbanops.framework.common.pojo.PageParam; | 5 | import com.zteits.urbanops.framework.common.pojo.PageParam; |
| 6 | +import com.zteits.urbanops.module.garden.dal.dataobject.mechanicalcost.MechanicalCostDO; | ||
| 4 | import io.swagger.v3.oas.annotations.media.Schema; | 7 | import io.swagger.v3.oas.annotations.media.Schema; |
| 8 | +import jakarta.validation.constraints.AssertTrue; | ||
| 5 | import lombok.Data; | 9 | import lombok.Data; |
| 6 | import org.springframework.format.annotation.DateTimeFormat; | 10 | import org.springframework.format.annotation.DateTimeFormat; |
| 7 | 11 | ||
| @@ -9,6 +13,7 @@ import java.math.BigDecimal; | @@ -9,6 +13,7 @@ import java.math.BigDecimal; | ||
| 9 | import java.time.LocalDate; | 13 | import java.time.LocalDate; |
| 10 | import java.time.LocalDateTime; | 14 | import java.time.LocalDateTime; |
| 11 | import java.util.List; | 15 | import java.util.List; |
| 16 | +import java.util.Map; | ||
| 12 | 17 | ||
| 13 | import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | 18 | import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
| 14 | 19 | ||
| @@ -44,14 +49,16 @@ public class MechanicalCostPageReqVO extends PageParam { | @@ -44,14 +49,16 @@ public class MechanicalCostPageReqVO extends PageParam { | ||
| 44 | private String vehicleType; | 49 | private String vehicleType; |
| 45 | 50 | ||
| 46 | @Schema(description = "开始使用时间") | 51 | @Schema(description = "开始使用时间") |
| 47 | - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | 52 | + @JsonFormat(pattern = "yyyy-MM-dd", shape = JsonFormat.Shape.STRING) |
| 53 | + @DateTimeFormat(pattern = "yyyy-MM-dd") | ||
| 48 | private LocalDate[] startUseTime; | 54 | private LocalDate[] startUseTime; |
| 49 | 55 | ||
| 50 | @Schema(description = "使用年限") | 56 | @Schema(description = "使用年限") |
| 51 | private Long serviceLife; | 57 | private Long serviceLife; |
| 52 | 58 | ||
| 53 | @Schema(description = "结束使用时间") | 59 | @Schema(description = "结束使用时间") |
| 54 | - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | 60 | + @JsonFormat(pattern = "yyyy-MM-dd", shape = JsonFormat.Shape.STRING) |
| 61 | + @DateTimeFormat(pattern = "yyyy-MM-dd") | ||
| 55 | private LocalDate[] endUseTime; | 62 | private LocalDate[] endUseTime; |
| 56 | 63 | ||
| 57 | @Schema(description = "归属公司", example = "张三") | 64 | @Schema(description = "归属公司", example = "张三") |
| @@ -67,6 +74,16 @@ public class MechanicalCostPageReqVO extends PageParam { | @@ -67,6 +74,16 @@ public class MechanicalCostPageReqVO extends PageParam { | ||
| 67 | private String remark; | 74 | private String remark; |
| 68 | 75 | ||
| 69 | @Schema(description = "创建时间") | 76 | @Schema(description = "创建时间") |
| 70 | - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 71 | private LocalDateTime[] createTime; | 77 | private LocalDateTime[] createTime; |
| 78 | + | ||
| 79 | + //对应前端排序字段 | ||
| 80 | + public static final Map<String, SFunction<MechanicalCostDO, ?>> SORT_FIELD_MAP = Map.of( | ||
| 81 | + "id", MechanicalCostDO::getId, | ||
| 82 | + "unitPrice", MechanicalCostDO::getUnitPrice, | ||
| 83 | + "quantity", MechanicalCostDO::getQuantity, | ||
| 84 | + "serviceLife", MechanicalCostDO::getServiceLife, | ||
| 85 | + "startUseTime", MechanicalCostDO::getStartUseTime, | ||
| 86 | + "endUseTime" , MechanicalCostDO::getEndUseTime | ||
| 87 | + ); | ||
| 88 | + | ||
| 72 | } | 89 | } |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/mechanicaldepreciation/vo/MechanicalDepreciationPageReqVO.java
| 1 | package com.zteits.urbanops.module.garden.controller.admin.mechanicaldepreciation.vo; | 1 | package com.zteits.urbanops.module.garden.controller.admin.mechanicaldepreciation.vo; |
| 2 | 2 | ||
| 3 | -import lombok.*; | ||
| 4 | -import java.util.*; | ||
| 5 | -import io.swagger.v3.oas.annotations.media.Schema; | ||
| 6 | import com.zteits.urbanops.framework.common.pojo.PageParam; | 3 | import com.zteits.urbanops.framework.common.pojo.PageParam; |
| 7 | -import java.math.BigDecimal; | 4 | +import io.swagger.v3.oas.annotations.media.Schema; |
| 5 | +import lombok.Data; | ||
| 8 | import org.springframework.format.annotation.DateTimeFormat; | 6 | import org.springframework.format.annotation.DateTimeFormat; |
| 7 | + | ||
| 8 | +import java.math.BigDecimal; | ||
| 9 | import java.time.LocalDateTime; | 9 | import java.time.LocalDateTime; |
| 10 | 10 | ||
| 11 | import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | 11 | import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
| @@ -51,4 +51,4 @@ public class MechanicalDepreciationPageReqVO extends PageParam { | @@ -51,4 +51,4 @@ public class MechanicalDepreciationPageReqVO extends PageParam { | ||
| 51 | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | 51 | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
| 52 | private LocalDateTime[] createTime; | 52 | private LocalDateTime[] createTime; |
| 53 | 53 | ||
| 54 | -} | ||
| 55 | \ No newline at end of file | 54 | \ No newline at end of file |
| 55 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/personalcost/vo/PersonalCostPageReqVO.java
| 1 | package com.zteits.urbanops.module.garden.controller.admin.personalcost.vo; | 1 | package com.zteits.urbanops.module.garden.controller.admin.personalcost.vo; |
| 2 | 2 | ||
| 3 | +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; | ||
| 3 | import com.zteits.urbanops.framework.common.pojo.PageParam; | 4 | import com.zteits.urbanops.framework.common.pojo.PageParam; |
| 5 | +import com.zteits.urbanops.module.garden.dal.dataobject.personalcost.PersonalCostDO; | ||
| 4 | import io.swagger.v3.oas.annotations.media.Schema; | 6 | import io.swagger.v3.oas.annotations.media.Schema; |
| 5 | import lombok.Data; | 7 | import lombok.Data; |
| 6 | import org.springframework.format.annotation.DateTimeFormat; | 8 | import org.springframework.format.annotation.DateTimeFormat; |
| @@ -8,6 +10,7 @@ import org.springframework.format.annotation.DateTimeFormat; | @@ -8,6 +10,7 @@ import org.springframework.format.annotation.DateTimeFormat; | ||
| 8 | import java.math.BigDecimal; | 10 | import java.math.BigDecimal; |
| 9 | import java.time.LocalDateTime; | 11 | import java.time.LocalDateTime; |
| 10 | import java.util.List; | 12 | import java.util.List; |
| 13 | +import java.util.Map; | ||
| 11 | 14 | ||
| 12 | import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | 15 | import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
| 13 | 16 | ||
| @@ -46,4 +49,11 @@ public class PersonalCostPageReqVO extends PageParam { | @@ -46,4 +49,11 @@ public class PersonalCostPageReqVO extends PageParam { | ||
| 46 | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | 49 | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
| 47 | private LocalDateTime[] createTime; | 50 | private LocalDateTime[] createTime; |
| 48 | 51 | ||
| 52 | + public static final Map<String, SFunction<PersonalCostDO, ?>> SORT_FIELD_MAP = Map.of( | ||
| 53 | + "id", PersonalCostDO::getId, | ||
| 54 | + "salaryMonth", PersonalCostDO::getSalaryMonth, | ||
| 55 | + "salaryAmount", PersonalCostDO::getSalaryAmount, | ||
| 56 | + "createTime", PersonalCostDO::getCreateTime | ||
| 57 | + ); | ||
| 58 | + | ||
| 49 | } | 59 | } |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/PlanRateController.java
| @@ -119,8 +119,7 @@ public class PlanRateController { | @@ -119,8 +119,7 @@ public class PlanRateController { | ||
| 119 | @Operation(summary = "获得计划频次分页") | 119 | @Operation(summary = "获得计划频次分页") |
| 120 | @PreAuthorize("@ss.hasPermission('garden:plan-rate:query')") | 120 | @PreAuthorize("@ss.hasPermission('garden:plan-rate:query')") |
| 121 | public CommonResult<PageResult<PlanRateRespVO>> getPlanRatePage(@Valid PlanRatePageReqVO pageReqVO) { | 121 | public CommonResult<PageResult<PlanRateRespVO>> getPlanRatePage(@Valid PlanRatePageReqVO pageReqVO) { |
| 122 | - PageResult<PlanRateDO> pageResult = planRateService.getPlanRatePage(pageReqVO); | ||
| 123 | - return success(BeanUtils.toBean(pageResult, PlanRateRespVO.class)); | 122 | + return success(planRateService.getPlanRatePage(pageReqVO)); |
| 124 | } | 123 | } |
| 125 | 124 | ||
| 126 | @GetMapping("/export-excel") | 125 | @GetMapping("/export-excel") |
| @@ -130,7 +129,7 @@ public class PlanRateController { | @@ -130,7 +129,7 @@ public class PlanRateController { | ||
| 130 | public void exportPlanRateExcel(@Valid PlanRatePageReqVO pageReqVO, | 129 | public void exportPlanRateExcel(@Valid PlanRatePageReqVO pageReqVO, |
| 131 | HttpServletResponse response) throws IOException { | 130 | HttpServletResponse response) throws IOException { |
| 132 | pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | 131 | pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); |
| 133 | - List<PlanRateDO> list = planRateService.getPlanRatePage(pageReqVO).getList(); | 132 | + List<PlanRateRespVO> list = planRateService.getPlanRatePage(pageReqVO).getList(); |
| 134 | // 导出 Excel | 133 | // 导出 Excel |
| 135 | ExcelUtils.write(response, "计划频次.xls", "数据", PlanRateRespVO.class, | 134 | ExcelUtils.write(response, "计划频次.xls", "数据", PlanRateRespVO.class, |
| 136 | BeanUtils.toBean(list, PlanRateRespVO.class)); | 135 | BeanUtils.toBean(list, PlanRateRespVO.class)); |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/PlanRateDetailController.java
| @@ -82,8 +82,9 @@ public class PlanRateDetailController { | @@ -82,8 +82,9 @@ public class PlanRateDetailController { | ||
| 82 | @PreAuthorize("@ss.hasPermission('garden:plan-rate-detail:query')") | 82 | @PreAuthorize("@ss.hasPermission('garden:plan-rate-detail:query')") |
| 83 | public CommonResult<PlanRateDetailRespVO> getPlanRateValue(@RequestParam("busi_Line") @NotBlank String busiLine, | 83 | public CommonResult<PlanRateDetailRespVO> getPlanRateValue(@RequestParam("busi_Line") @NotBlank String busiLine, |
| 84 | @RequestParam("plan_type_id") @NotNull Integer planTypeId, | 84 | @RequestParam("plan_type_id") @NotNull Integer planTypeId, |
| 85 | - @RequestParam("level_id") @NotNull Integer levelId) { | ||
| 86 | - return success(planRateDetailService.getPlanRateValue(busiLine, planTypeId, levelId)); | 85 | + @RequestParam("level_id") @NotNull Integer levelId, |
| 86 | + @RequestParam("company_id") Long companyId) { | ||
| 87 | + return success(planRateDetailService.getPlanRateValue(busiLine, planTypeId, levelId, companyId)); | ||
| 87 | } | 88 | } |
| 88 | 89 | ||
| 89 | @GetMapping("/page") | 90 | @GetMapping("/page") |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRatePageReqVO.java
| 1 | package com.zteits.urbanops.module.garden.controller.admin.planrate.vo; | 1 | package com.zteits.urbanops.module.garden.controller.admin.planrate.vo; |
| 2 | 2 | ||
| 3 | +import io.swagger.v3.oas.annotations.Hidden; | ||
| 3 | import jakarta.validation.constraints.NotNull; | 4 | import jakarta.validation.constraints.NotNull; |
| 4 | import lombok.*; | 5 | import lombok.*; |
| 5 | import java.util.*; | 6 | import java.util.*; |
| @@ -30,4 +31,8 @@ public class PlanRatePageReqVO extends PageParam { | @@ -30,4 +31,8 @@ public class PlanRatePageReqVO extends PageParam { | ||
| 30 | @NotNull(message = "类型:1:养护;2:巡查不能为空") | 31 | @NotNull(message = "类型:1:养护;2:巡查不能为空") |
| 31 | private Integer type; | 32 | private Integer type; |
| 32 | 33 | ||
| 34 | + @Schema(description = "公司ID", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 35 | + @Hidden | ||
| 36 | + private Long companyId; | ||
| 37 | + | ||
| 33 | } | 38 | } |
| 34 | \ No newline at end of file | 39 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateRespVO.java
| @@ -36,4 +36,10 @@ public class PlanRateRespVO { | @@ -36,4 +36,10 @@ public class PlanRateRespVO { | ||
| 36 | @ExcelProperty("创建时间") | 36 | @ExcelProperty("创建时间") |
| 37 | private LocalDateTime createTime; | 37 | private LocalDateTime createTime; |
| 38 | 38 | ||
| 39 | + @Schema(description = "公司ID", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 40 | + private Long companyId; | ||
| 41 | + | ||
| 42 | + @Schema(description = "公司", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 43 | + private String companyName; | ||
| 44 | + | ||
| 39 | } | 45 | } |
| 40 | \ No newline at end of file | 46 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/planrate/vo/PlanRateSaveReqVO.java
| @@ -29,6 +29,9 @@ public class PlanRateSaveReqVO { | @@ -29,6 +29,9 @@ public class PlanRateSaveReqVO { | ||
| 29 | @NotNull(message = "类型:1:养护;2:巡查不能为空") | 29 | @NotNull(message = "类型:1:养护;2:巡查不能为空") |
| 30 | private Integer type; | 30 | private Integer type; |
| 31 | 31 | ||
| 32 | + @Schema(description = "公司ID") | ||
| 33 | + private Long companyId; | ||
| 34 | + | ||
| 32 | @NotNull@NotNull(message = "频次明细不能为空") | 35 | @NotNull@NotNull(message = "频次明细不能为空") |
| 33 | @Size(min = 1) | 36 | @Size(min = 1) |
| 34 | @Valid | 37 | @Valid |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/problemtype/GardenProblemTypeController.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.problemtype; | ||
| 2 | + | ||
| 3 | +import com.zteits.urbanops.module.garden.controller.admin.problemtype.vo.ProblemTypePageReqVO; | ||
| 4 | +import com.zteits.urbanops.module.garden.controller.admin.problemtype.vo.ProblemTypeRespVO; | ||
| 5 | +import com.zteits.urbanops.module.garden.controller.admin.problemtype.vo.ProblemTypeSaveReqVO; | ||
| 6 | +import org.springframework.web.bind.annotation.*; | ||
| 7 | +import jakarta.annotation.Resource; | ||
| 8 | +import org.springframework.validation.annotation.Validated; | ||
| 9 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 10 | +import io.swagger.v3.oas.annotations.tags.Tag; | ||
| 11 | +import io.swagger.v3.oas.annotations.Parameter; | ||
| 12 | +import io.swagger.v3.oas.annotations.Operation; | ||
| 13 | + | ||
| 14 | +import jakarta.validation.*; | ||
| 15 | +import java.util.*; | ||
| 16 | + | ||
| 17 | +import com.zteits.urbanops.framework.common.pojo.CommonResult; | ||
| 18 | +import com.zteits.urbanops.framework.common.pojo.PageResult; | ||
| 19 | +import com.zteits.urbanops.framework.common.util.object.BeanUtils; | ||
| 20 | +import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; | ||
| 21 | + | ||
| 22 | +import com.zteits.urbanops.module.garden.dal.dataobject.problemtype.GardenProblemTypeDO; | ||
| 23 | +import com.zteits.urbanops.module.garden.dal.mysql.problemtype.GardenProblemTypeMapper; | ||
| 24 | +import com.zteits.urbanops.module.garden.service.problemtype.GardenProblemTypeService; | ||
| 25 | + | ||
| 26 | +@Tag(name = "管理后台 - 问题类型配置") | ||
| 27 | +@RestController | ||
| 28 | +@RequestMapping("/garden/problem-type") | ||
| 29 | +@Validated | ||
| 30 | +public class GardenProblemTypeController { | ||
| 31 | + | ||
| 32 | + @Resource | ||
| 33 | + private GardenProblemTypeService gardenProblemTypeService; | ||
| 34 | + | ||
| 35 | + @Resource | ||
| 36 | + private GardenProblemTypeMapper gardenProblemTypeMapper; | ||
| 37 | + | ||
| 38 | + @PostMapping("/create") | ||
| 39 | + @Operation(summary = "创建问题类型(二级/三级)") | ||
| 40 | + @PreAuthorize("@ss.hasPermission('garden:problem-type:create')") | ||
| 41 | + public CommonResult<Long> createProblemType(@Valid @RequestBody ProblemTypeSaveReqVO createReqVO) { | ||
| 42 | + return success(gardenProblemTypeService.createProblemType(createReqVO)); | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + @PutMapping("/update") | ||
| 46 | + @Operation(summary = "更新问题类型(二级/三级)") | ||
| 47 | + @PreAuthorize("@ss.hasPermission('garden:problem-type:update')") | ||
| 48 | + public CommonResult<Boolean> updateProblemType(@Valid @RequestBody ProblemTypeSaveReqVO updateReqVO) { | ||
| 49 | + gardenProblemTypeService.updateProblemType(updateReqVO); | ||
| 50 | + return success(true); | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + @DeleteMapping("/delete") | ||
| 54 | + @Operation(summary = "删除问题类型") | ||
| 55 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 56 | + @PreAuthorize("@ss.hasPermission('garden:problem-type:delete')") | ||
| 57 | + public CommonResult<Boolean> deleteProblemType(@RequestParam("id") Long id) { | ||
| 58 | + gardenProblemTypeService.deleteProblemType(id); | ||
| 59 | + return success(true); | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + @GetMapping("/get") | ||
| 63 | + @Operation(summary = "获得问题类型") | ||
| 64 | + @Parameter(name = "id", description = "编号", required = true, example = "1024") | ||
| 65 | + @PreAuthorize("@ss.hasPermission('garden:problem-type:query')") | ||
| 66 | + public CommonResult<ProblemTypeRespVO> getProblemType(@RequestParam("id") Long id) { | ||
| 67 | + GardenProblemTypeDO problemType = gardenProblemTypeService.getProblemType(id); | ||
| 68 | + ProblemTypeRespVO respVO = BeanUtils.toBean(problemType, ProblemTypeRespVO.class); | ||
| 69 | + fillParentNames(Arrays.asList(respVO)); | ||
| 70 | + return success(respVO); | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + @GetMapping("/page") | ||
| 74 | + @Operation(summary = "获得问题类型分页") | ||
| 75 | + @PreAuthorize("@ss.hasPermission('garden:problem-type:query')") | ||
| 76 | + public CommonResult<PageResult<ProblemTypeRespVO>> getProblemTypePage(@Valid ProblemTypePageReqVO pageReqVO) { | ||
| 77 | + PageResult<GardenProblemTypeDO> pageResult = gardenProblemTypeService.getProblemTypePage(pageReqVO); | ||
| 78 | + PageResult<ProblemTypeRespVO> voPageResult = BeanUtils.toBean(pageResult, ProblemTypeRespVO.class); | ||
| 79 | + fillParentNames(voPageResult.getList()); | ||
| 80 | + return success(voPageResult); | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + @GetMapping("/list-by-parent") | ||
| 84 | + @Operation(summary = "根据父级编码和层级查询子类型列表(级联下拉用)") | ||
| 85 | + @PreAuthorize("@ss.hasPermission('garden:problem-type:query')") | ||
| 86 | + public CommonResult<List<ProblemTypeRespVO>> getProblemTypeListByParent( | ||
| 87 | + @RequestParam(value = "parentCode", required = false) String parentCode, | ||
| 88 | + @RequestParam("level") Integer level) { | ||
| 89 | + List<GardenProblemTypeDO> list = gardenProblemTypeService.getProblemTypeByParentCode(parentCode, level); | ||
| 90 | + return success(BeanUtils.toBean(list, ProblemTypeRespVO.class)); | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + @GetMapping("/generate-next-code") | ||
| 94 | + @Operation(summary = "根据父级编码生成下一个类型编码") | ||
| 95 | + @PreAuthorize("@ss.hasPermission('garden:problem-type:create')") | ||
| 96 | + public CommonResult<String> generateNextCode(@RequestParam("parentCode") String parentCode) { | ||
| 97 | + return success(gardenProblemTypeService.generateNextCode(parentCode)); | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + @PostMapping("/sync-level-one") | ||
| 101 | + @Operation(summary = "从字典表同步一级类型") | ||
| 102 | + @PreAuthorize("@ss.hasPermission('garden:problem-type:create')") | ||
| 103 | + public CommonResult<Integer> syncLevelOne() { | ||
| 104 | + return success(gardenProblemTypeService.syncLevelOneFromDict()); | ||
| 105 | + } | ||
| 106 | + | ||
| 107 | + /** | ||
| 108 | + * 填充每个记录的层级名称: | ||
| 109 | + * level 1 → levelOneName = 自身 typeName | ||
| 110 | + * level 2 → levelTwoName = 自身 typeName, levelOneName = 父级 typeName | ||
| 111 | + * level 3 → levelOneName = 祖父 typeName, levelTwoName = 父级 typeName | ||
| 112 | + */ | ||
| 113 | + private void fillParentNames(List<ProblemTypeRespVO> list) { | ||
| 114 | + if (list == null || list.isEmpty()) { | ||
| 115 | + return; | ||
| 116 | + } | ||
| 117 | + for (ProblemTypeRespVO vo : list) { | ||
| 118 | + if (vo.getLevel() == null) continue; | ||
| 119 | + if (vo.getLevel() == 1) { | ||
| 120 | + vo.setLevelOneName(vo.getTypeName()); | ||
| 121 | + } else if (vo.getLevel() == 2) { | ||
| 122 | + vo.setLevelTwoName(vo.getTypeName()); | ||
| 123 | + if (vo.getParentCode() != null) { | ||
| 124 | + GardenProblemTypeDO parent = gardenProblemTypeMapper.selectByTypeCode(vo.getParentCode()); | ||
| 125 | + if (parent != null) { | ||
| 126 | + vo.setLevelOneName(parent.getTypeName()); | ||
| 127 | + } | ||
| 128 | + } | ||
| 129 | + } else if (vo.getLevel() == 3) { | ||
| 130 | + if (vo.getParentCode() != null) { | ||
| 131 | + GardenProblemTypeDO parent = gardenProblemTypeMapper.selectByTypeCode(vo.getParentCode()); | ||
| 132 | + if (parent != null) { | ||
| 133 | + vo.setLevelTwoName(parent.getTypeName()); | ||
| 134 | + if (parent.getParentCode() != null) { | ||
| 135 | + GardenProblemTypeDO grandParent = gardenProblemTypeMapper | ||
| 136 | + .selectByTypeCode(parent.getParentCode()); | ||
| 137 | + if (grandParent != null) { | ||
| 138 | + vo.setLevelOneName(grandParent.getTypeName()); | ||
| 139 | + } | ||
| 140 | + } | ||
| 141 | + } | ||
| 142 | + } | ||
| 143 | + } | ||
| 144 | + } | ||
| 145 | + } | ||
| 146 | + | ||
| 147 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/problemtype/vo/ProblemTypePageReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.problemtype.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.Data; | ||
| 5 | +import com.zteits.urbanops.framework.common.pojo.PageParam; | ||
| 6 | + | ||
| 7 | +@Schema(description = "管理后台 - 问题类型分页 Request VO") | ||
| 8 | +@Data | ||
| 9 | +public class ProblemTypePageReqVO extends PageParam { | ||
| 10 | + | ||
| 11 | + @Schema(description = "问题类型编码", example = "PT001") | ||
| 12 | + private String typeCode; | ||
| 13 | + | ||
| 14 | + @Schema(description = "问题类型名称", example = "树木倒伏") | ||
| 15 | + private String typeName; | ||
| 16 | + | ||
| 17 | + @Schema(description = "层级:1一级 2二级 3三级", example = "2") | ||
| 18 | + private Integer level; | ||
| 19 | + | ||
| 20 | + @Schema(description = "父级类型编码", example = "BIZ_GARDEN") | ||
| 21 | + private String parentCode; | ||
| 22 | + | ||
| 23 | + @Schema(description = "一级类型编码(级联筛选)", example = "yl") | ||
| 24 | + private String levelOneCode; | ||
| 25 | + | ||
| 26 | + @Schema(description = "状态 1启用 0禁用", example = "1") | ||
| 27 | + private Integer status; | ||
| 28 | + | ||
| 29 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/problemtype/vo/ProblemTypeRespVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.problemtype.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.Data; | ||
| 5 | +import cn.idev.excel.annotation.*; | ||
| 6 | + | ||
| 7 | +@Schema(description = "管理后台 - 问题类型 Response VO") | ||
| 8 | +@Data | ||
| 9 | +@ExcelIgnoreUnannotated | ||
| 10 | +public class ProblemTypeRespVO { | ||
| 11 | + | ||
| 12 | + @Schema(description = "主键ID", example = "1") | ||
| 13 | + @ExcelProperty("主键ID") | ||
| 14 | + private Long id; | ||
| 15 | + | ||
| 16 | + @Schema(description = "问题类型编码", example = "PT001") | ||
| 17 | + @ExcelProperty("问题类型编码") | ||
| 18 | + private String typeCode; | ||
| 19 | + | ||
| 20 | + @Schema(description = "问题类型名称", example = "树木倒伏") | ||
| 21 | + @ExcelProperty("问题类型名称") | ||
| 22 | + private String typeName; | ||
| 23 | + | ||
| 24 | + @Schema(description = "层级:1一级 2二级 3三级", example = "2") | ||
| 25 | + @ExcelProperty("层级") | ||
| 26 | + private Integer level; | ||
| 27 | + | ||
| 28 | + @Schema(description = "父级类型编码", example = "BIZ_GARDEN") | ||
| 29 | + @ExcelProperty("父级类型编码") | ||
| 30 | + private String parentCode; | ||
| 31 | + | ||
| 32 | + @Schema(description = "排序序号", example = "1") | ||
| 33 | + @ExcelProperty("排序序号") | ||
| 34 | + private Integer sort; | ||
| 35 | + | ||
| 36 | + @Schema(description = "状态 1启用 0禁用", example = "1") | ||
| 37 | + @ExcelProperty("状态") | ||
| 38 | + private Integer status; | ||
| 39 | + | ||
| 40 | + @Schema(description = "一级类型名称") | ||
| 41 | + private String levelOneName; | ||
| 42 | + | ||
| 43 | + @Schema(description = "二级类型名称") | ||
| 44 | + private String levelTwoName; | ||
| 45 | + | ||
| 46 | + @Schema(description = "创建者") | ||
| 47 | + @ExcelProperty("创建者") | ||
| 48 | + private String creator; | ||
| 49 | + | ||
| 50 | + @Schema(description = "创建时间") | ||
| 51 | + @ExcelProperty("创建时间") | ||
| 52 | + private String createTime; | ||
| 53 | + | ||
| 54 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/problemtype/vo/ProblemTypeSaveReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.problemtype.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.Data; | ||
| 5 | +import jakarta.validation.constraints.*; | ||
| 6 | + | ||
| 7 | +@Schema(description = "管理后台 - 问题类型新增/修改 Request VO") | ||
| 8 | +@Data | ||
| 9 | +public class ProblemTypeSaveReqVO { | ||
| 10 | + | ||
| 11 | + @Schema(description = "主键ID", example = "1") | ||
| 12 | + private Long id; | ||
| 13 | + | ||
| 14 | + @Schema(description = "问题类型编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "PT001") | ||
| 15 | + @NotEmpty(message = "问题类型编码不能为空") | ||
| 16 | + private String typeCode; | ||
| 17 | + | ||
| 18 | + @Schema(description = "问题类型名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "树木倒伏") | ||
| 19 | + @NotEmpty(message = "问题类型名称不能为空") | ||
| 20 | + private String typeName; | ||
| 21 | + | ||
| 22 | + @Schema(description = "层级:1一级 2二级 3三级", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | ||
| 23 | + @NotNull(message = "层级不能为空") | ||
| 24 | + private Integer level; | ||
| 25 | + | ||
| 26 | + @Schema(description = "父级类型编码", example = "BIZ_GARDEN") | ||
| 27 | + private String parentCode; | ||
| 28 | + | ||
| 29 | + @Schema(description = "排序序号", example = "1") | ||
| 30 | + private Integer sort; | ||
| 31 | + | ||
| 32 | + @Schema(description = "状态 1启用 0禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 33 | + @NotNull(message = "状态不能为空") | ||
| 34 | + private Integer status; | ||
| 35 | + | ||
| 36 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/rentalmechanicalcost/vo/RentalMechanicalCostPageReqVO.java
| 1 | package com.zteits.urbanops.module.garden.controller.admin.rentalmechanicalcost.vo; | 1 | package com.zteits.urbanops.module.garden.controller.admin.rentalmechanicalcost.vo; |
| 2 | 2 | ||
| 3 | import com.baomidou.mybatisplus.core.toolkit.support.SFunction; | 3 | import com.baomidou.mybatisplus.core.toolkit.support.SFunction; |
| 4 | +import com.fasterxml.jackson.annotation.JsonFormat; | ||
| 4 | import com.zteits.urbanops.framework.common.pojo.PageParam; | 5 | import com.zteits.urbanops.framework.common.pojo.PageParam; |
| 5 | import com.zteits.urbanops.module.garden.dal.dataobject.rentalmechanicalcost.RentalMechanicalCostDO; | 6 | import com.zteits.urbanops.module.garden.dal.dataobject.rentalmechanicalcost.RentalMechanicalCostDO; |
| 6 | import io.swagger.v3.oas.annotations.media.Schema; | 7 | import io.swagger.v3.oas.annotations.media.Schema; |
| 8 | +import jakarta.validation.constraints.AssertTrue; | ||
| 7 | import lombok.Data; | 9 | import lombok.Data; |
| 8 | import org.springframework.format.annotation.DateTimeFormat; | 10 | import org.springframework.format.annotation.DateTimeFormat; |
| 9 | 11 | ||
| @@ -25,14 +27,17 @@ public class RentalMechanicalCostPageReqVO extends PageParam { | @@ -25,14 +27,17 @@ public class RentalMechanicalCostPageReqVO extends PageParam { | ||
| 25 | @Schema(description = "租赁总价格", example = "316") | 27 | @Schema(description = "租赁总价格", example = "316") |
| 26 | private BigDecimal rentalTotalPriceMax; | 28 | private BigDecimal rentalTotalPriceMax; |
| 27 | @Schema(description = "开始使用时间") | 29 | @Schema(description = "开始使用时间") |
| 30 | + @JsonFormat(pattern = "yyyy-MM-dd", shape = JsonFormat.Shape.STRING) | ||
| 28 | @DateTimeFormat(pattern = "yyyy-MM-dd") | 31 | @DateTimeFormat(pattern = "yyyy-MM-dd") |
| 29 | - private Date startUseTime; | 32 | + private LocalDate[] startUseTime; |
| 30 | 33 | ||
| 31 | @Schema(description = "使用时长(天)") | 34 | @Schema(description = "使用时长(天)") |
| 32 | private Integer useDuration; | 35 | private Integer useDuration; |
| 33 | 36 | ||
| 34 | @Schema(description = "结束日期") | 37 | @Schema(description = "结束日期") |
| 35 | - private LocalDate endUseTime; | 38 | + @JsonFormat(pattern = "yyyy-MM-dd", shape = JsonFormat.Shape.STRING) |
| 39 | + @DateTimeFormat(pattern = "yyyy-MM-dd") | ||
| 40 | + private LocalDate[] endUseTime; | ||
| 36 | 41 | ||
| 37 | @Schema(description = "数量") | 42 | @Schema(description = "数量") |
| 38 | private Integer quantity; | 43 | private Integer quantity; |
| @@ -42,9 +47,11 @@ public class RentalMechanicalCostPageReqVO extends PageParam { | @@ -42,9 +47,11 @@ public class RentalMechanicalCostPageReqVO extends PageParam { | ||
| 42 | 47 | ||
| 43 | public static final Map<String, SFunction<RentalMechanicalCostDO, ?>> SORT_FIELD_MAP = Map.of( | 48 | public static final Map<String, SFunction<RentalMechanicalCostDO, ?>> SORT_FIELD_MAP = Map.of( |
| 44 | "id", RentalMechanicalCostDO::getId, | 49 | "id", RentalMechanicalCostDO::getId, |
| 50 | + "rentalTotalPrice",RentalMechanicalCostDO::getRentalTotalPrice, | ||
| 45 | "quantity", RentalMechanicalCostDO::getQuantity, | 51 | "quantity", RentalMechanicalCostDO::getQuantity, |
| 46 | "useDuration", RentalMechanicalCostDO::getUseDuration, | 52 | "useDuration", RentalMechanicalCostDO::getUseDuration, |
| 47 | "startUseTime", RentalMechanicalCostDO::getStartUseTime, | 53 | "startUseTime", RentalMechanicalCostDO::getStartUseTime, |
| 48 | "endUseTime", RentalMechanicalCostDO::getEndUseTime | 54 | "endUseTime", RentalMechanicalCostDO::getEndUseTime |
| 49 | ); | 55 | ); |
| 56 | + | ||
| 50 | } | 57 | } |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/road/RoadController.java
| @@ -2,6 +2,9 @@ package com.zteits.urbanops.module.garden.controller.admin.road; | @@ -2,6 +2,9 @@ package com.zteits.urbanops.module.garden.controller.admin.road; | ||
| 2 | 2 | ||
| 3 | import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; | 3 | import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; |
| 4 | import com.zteits.urbanops.module.system.api.permission.PermissionApi; | 4 | import com.zteits.urbanops.module.system.api.permission.PermissionApi; |
| 5 | +import jakarta.annotation.security.PermitAll; | ||
| 6 | +import org.slf4j.Logger; | ||
| 7 | +import org.slf4j.LoggerFactory; | ||
| 5 | import org.springframework.web.bind.annotation.*; | 8 | import org.springframework.web.bind.annotation.*; |
| 6 | import jakarta.annotation.Resource; | 9 | import jakarta.annotation.Resource; |
| 7 | import org.springframework.validation.annotation.Validated; | 10 | import org.springframework.validation.annotation.Validated; |
| @@ -36,6 +39,7 @@ import com.zteits.urbanops.module.garden.service.road.RoadService; | @@ -36,6 +39,7 @@ import com.zteits.urbanops.module.garden.service.road.RoadService; | ||
| 36 | @RequestMapping("/garden/road") | 39 | @RequestMapping("/garden/road") |
| 37 | @Validated | 40 | @Validated |
| 38 | public class RoadController { | 41 | public class RoadController { |
| 42 | + private static final Logger log = LoggerFactory.getLogger(RoadController.class); | ||
| 39 | 43 | ||
| 40 | @Resource | 44 | @Resource |
| 41 | private RoadService roadService; | 45 | private RoadService roadService; |
| @@ -93,7 +97,11 @@ public class RoadController { | @@ -93,7 +97,11 @@ public class RoadController { | ||
| 93 | if(permissionApi.hasAnyRoles(loginUserId, "super_admin")){ | 97 | if(permissionApi.hasAnyRoles(loginUserId, "super_admin")){ |
| 94 | pageReqVO.setCompanyId( null); | 98 | pageReqVO.setCompanyId( null); |
| 95 | }else{ | 99 | }else{ |
| 96 | - pageReqVO.setCompanyId(SecurityFrameworkUtils.getCompanyId()); | 100 | + Long companyId = SecurityFrameworkUtils.getCompanyId(); |
| 101 | + if(null == companyId || companyId == 0L || companyId == 100L){ | ||
| 102 | + companyId = null; | ||
| 103 | + } | ||
| 104 | + pageReqVO.setCompanyId(companyId); | ||
| 97 | } | 105 | } |
| 98 | } | 106 | } |
| 99 | PageResult<RoadRespVO> pageResult = roadService.getRoadPage(pageReqVO); | 107 | PageResult<RoadRespVO> pageResult = roadService.getRoadPage(pageReqVO); |
| @@ -124,19 +132,30 @@ public class RoadController { | @@ -124,19 +132,30 @@ public class RoadController { | ||
| 124 | 132 | ||
| 125 | @Operation(summary = "物联网查询道路") | 133 | @Operation(summary = "物联网查询道路") |
| 126 | @GetMapping("/queryAllRoadList") | 134 | @GetMapping("/queryAllRoadList") |
| 127 | - public CommonResult<List<SysRoadRespVO>> queryAllRoadList(@RequestParam(required = false)String roadName,@RequestParam(required = false)String deptCode,@RequestParam(required = false)String companyCode) { | 135 | + @PermitAll |
| 136 | + public Map<String, Object> queryAllRoadList(@RequestParam(required = false) String roadName, @RequestParam(required = false) String deptCode, @RequestParam(required = false) String companyCode) { | ||
| 137 | + log.info("物联网查询道路:companyCode:{},roadName:{},deptCode:{}",companyCode,roadName,deptCode); | ||
| 128 | RoadListReqVO reqVO = new RoadListReqVO(); | 138 | RoadListReqVO reqVO = new RoadListReqVO(); |
| 129 | reqVO.setRoadName(roadName); | 139 | reqVO.setRoadName(roadName); |
| 130 | - reqVO.setCompanyId(Long.valueOf(deptCode)); | 140 | + // 处理deptCode为空的情况 |
| 141 | + if (deptCode != null && !deptCode.isEmpty()) { | ||
| 142 | + reqVO.setDeptId(Long.valueOf(deptCode)); | ||
| 143 | + } | ||
| 131 | reqVO.setBusiLine(companyCode); | 144 | reqVO.setBusiLine(companyCode); |
| 132 | List<RoadDO> roadList = roadService.getRoadList(reqVO); | 145 | List<RoadDO> roadList = roadService.getRoadList(reqVO); |
| 133 | - List<SysRoadRespVO> deptResps = roadList.stream().map(manager -> { | ||
| 134 | - SysRoadRespVO sysDeptResp = new SysRoadRespVO(); | ||
| 135 | - sysDeptResp.setRoadCode(manager.getId()+""); | ||
| 136 | - sysDeptResp.setRoadName(manager.getRoadName()); | ||
| 137 | - return sysDeptResp; | 146 | + List<Map<String, Object>> roadResps = roadList.stream().map(manager -> { |
| 147 | + Map<String, Object> roadMap = new HashMap<>(); | ||
| 148 | + roadMap.put("roadCode", manager.getId() + ""); | ||
| 149 | + roadMap.put("roadName", manager.getRoadName()); | ||
| 150 | + return roadMap; | ||
| 138 | }).collect(Collectors.toList()); | 151 | }).collect(Collectors.toList()); |
| 139 | - return success(deptResps); | 152 | + |
| 153 | + // 构建返回格式 | ||
| 154 | + Map<String, Object> result = new HashMap<>(); | ||
| 155 | + result.put("msg", "操作成功"); | ||
| 156 | + result.put("code", 200); | ||
| 157 | + result.put("data", roadResps); | ||
| 158 | + return result; | ||
| 140 | } | 159 | } |
| 141 | 160 | ||
| 142 | } | 161 | } |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/road/vo/RoadListReqVO.java
| @@ -26,8 +26,11 @@ public class RoadListReqVO { | @@ -26,8 +26,11 @@ public class RoadListReqVO { | ||
| 26 | @NotNull(message = "归属(一级部门id)不能为空") | 26 | @NotNull(message = "归属(一级部门id)不能为空") |
| 27 | private Long companyId; | 27 | private Long companyId; |
| 28 | 28 | ||
| 29 | + @Schema(description = "部门ID", example = "126") | ||
| 30 | + private Long deptId; | ||
| 31 | + | ||
| 29 | @Schema(description = "业务看", example = "yl") | 32 | @Schema(description = "业务看", example = "yl") |
| 30 | @NotEmpty(message = "创建者不能为空") | 33 | @NotEmpty(message = "创建者不能为空") |
| 31 | private String busiLine; | 34 | private String busiLine; |
| 32 | 35 | ||
| 33 | -} | ||
| 34 | \ No newline at end of file | 36 | \ No newline at end of file |
| 37 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/unitintegraladd/UnitIntegralAddController.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.unitintegraladd; | ||
| 2 | + | ||
| 3 | +import org.springframework.web.bind.annotation.*; | ||
| 4 | +import jakarta.annotation.Resource; | ||
| 5 | +import org.springframework.validation.annotation.Validated; | ||
| 6 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 7 | +import io.swagger.v3.oas.annotations.tags.Tag; | ||
| 8 | +import io.swagger.v3.oas.annotations.Parameter; | ||
| 9 | +import io.swagger.v3.oas.annotations.Operation; | ||
| 10 | + | ||
| 11 | +import jakarta.validation.constraints.*; | ||
| 12 | +import jakarta.validation.*; | ||
| 13 | +import jakarta.servlet.http.*; | ||
| 14 | +import java.util.*; | ||
| 15 | +import java.io.IOException; | ||
| 16 | + | ||
| 17 | +import com.zteits.urbanops.framework.common.pojo.PageParam; | ||
| 18 | +import com.zteits.urbanops.framework.common.pojo.PageResult; | ||
| 19 | +import com.zteits.urbanops.framework.common.pojo.CommonResult; | ||
| 20 | +import com.zteits.urbanops.framework.common.util.object.BeanUtils; | ||
| 21 | +import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; | ||
| 22 | + | ||
| 23 | +import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; | ||
| 24 | + | ||
| 25 | +import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; | ||
| 26 | +import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*; | ||
| 27 | + | ||
| 28 | +import com.zteits.urbanops.module.garden.controller.admin.unitintegraladd.vo.*; | ||
| 29 | +import com.zteits.urbanops.module.garden.dal.dataobject.unitintegraladd.UnitIntegralAddDO; | ||
| 30 | +import com.zteits.urbanops.module.garden.service.unitintegraladd.UnitIntegralAddService; | ||
| 31 | + | ||
| 32 | +@Tag(name = "管理后台 - 积分增加记录") | ||
| 33 | +@RestController | ||
| 34 | +@RequestMapping("/garden/unit-integral-add") | ||
| 35 | +@Validated | ||
| 36 | +public class UnitIntegralAddController { | ||
| 37 | + | ||
| 38 | + @Resource | ||
| 39 | + private UnitIntegralAddService unitIntegralAddService; | ||
| 40 | + | ||
| 41 | + @PostMapping("/create") | ||
| 42 | + @Operation(summary = "创建积分增加记录") | ||
| 43 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-add:create')") | ||
| 44 | + public CommonResult<Long> createUnitIntegralAdd(@Valid @RequestBody UnitIntegralAddSaveReqVO createReqVO) { | ||
| 45 | + return success(unitIntegralAddService.createUnitIntegralAdd(createReqVO)); | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + @PutMapping("/update") | ||
| 49 | + @Operation(summary = "更新积分增加记录") | ||
| 50 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-add:update')") | ||
| 51 | + public CommonResult<Boolean> updateUnitIntegralAdd(@Valid @RequestBody UnitIntegralAddSaveReqVO updateReqVO) { | ||
| 52 | + unitIntegralAddService.updateUnitIntegralAdd(updateReqVO); | ||
| 53 | + return success(true); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + @DeleteMapping("/delete") | ||
| 57 | + @Operation(summary = "删除积分增加记录") | ||
| 58 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 59 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-add:delete')") | ||
| 60 | + public CommonResult<Boolean> deleteUnitIntegralAdd(@RequestParam("id") Long id) { | ||
| 61 | + unitIntegralAddService.deleteUnitIntegralAdd(id); | ||
| 62 | + return success(true); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + @DeleteMapping("/delete-list") | ||
| 66 | + @Parameter(name = "ids", description = "编号", required = true) | ||
| 67 | + @Operation(summary = "批量删除积分增加记录") | ||
| 68 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-add:delete')") | ||
| 69 | + public CommonResult<Boolean> deleteUnitIntegralAddList(@RequestParam("ids") List<Long> ids) { | ||
| 70 | + unitIntegralAddService.deleteUnitIntegralAddListByIds(ids); | ||
| 71 | + return success(true); | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + @GetMapping("/get") | ||
| 75 | + @Operation(summary = "获得积分增加记录") | ||
| 76 | + @Parameter(name = "id", description = "编号", required = true, example = "1024") | ||
| 77 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-add:query')") | ||
| 78 | + public CommonResult<UnitIntegralAddRespVO> getUnitIntegralAdd(@RequestParam("id") Long id) { | ||
| 79 | + UnitIntegralAddDO unitIntegralAdd = unitIntegralAddService.getUnitIntegralAdd(id); | ||
| 80 | + return success(BeanUtils.toBean(unitIntegralAdd, UnitIntegralAddRespVO.class)); | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + @GetMapping("/page") | ||
| 84 | + @Operation(summary = "获得积分增加记录分页") | ||
| 85 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-add:query')") | ||
| 86 | + public CommonResult<PageResult<UnitIntegralAddRespVO>> getUnitIntegralAddPage(@Valid UnitIntegralAddPageReqVO pageReqVO) { | ||
| 87 | + PageResult<UnitIntegralAddDO> pageResult = unitIntegralAddService.getUnitIntegralAddPage(pageReqVO); | ||
| 88 | + return success(BeanUtils.toBean(pageResult, UnitIntegralAddRespVO.class)); | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + @GetMapping("/export-excel") | ||
| 92 | + @Operation(summary = "导出积分增加记录 Excel") | ||
| 93 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-add:export')") | ||
| 94 | + @ApiAccessLog(operateType = EXPORT) | ||
| 95 | + public void exportUnitIntegralAddExcel(@Valid UnitIntegralAddPageReqVO pageReqVO, | ||
| 96 | + HttpServletResponse response) throws IOException { | ||
| 97 | + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | ||
| 98 | + List<UnitIntegralAddDO> list = unitIntegralAddService.getUnitIntegralAddPage(pageReqVO).getList(); | ||
| 99 | + // 导出 Excel | ||
| 100 | + ExcelUtils.write(response, "积分增加记录.xls", "数据", UnitIntegralAddRespVO.class, | ||
| 101 | + BeanUtils.toBean(list, UnitIntegralAddRespVO.class)); | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | +} | ||
| 0 | \ No newline at end of file | 105 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/unitintegraladd/vo/UnitIntegralAddPageReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.unitintegraladd.vo; | ||
| 2 | + | ||
| 3 | +import lombok.*; | ||
| 4 | +import java.util.*; | ||
| 5 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 6 | +import com.zteits.urbanops.framework.common.pojo.PageParam; | ||
| 7 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 8 | +import java.time.LocalDateTime; | ||
| 9 | + | ||
| 10 | +import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 11 | + | ||
| 12 | +@Schema(description = "管理后台 - 积分增加记录分页 Request VO") | ||
| 13 | +@Data | ||
| 14 | +public class UnitIntegralAddPageReqVO extends PageParam { | ||
| 15 | + | ||
| 16 | + @Schema(description = "来源类型 01:派单", example = "1") | ||
| 17 | + private String sourceType; | ||
| 18 | + | ||
| 19 | + @Schema(description = "单位类型:01:公司 02:班组 03:个人", example = "1") | ||
| 20 | + private String unitType; | ||
| 21 | + | ||
| 22 | + @Schema(description = "单位ID(部门表 id)", example = "26490") | ||
| 23 | + private String unitId; | ||
| 24 | + | ||
| 25 | + @Schema(description = "单位名称(冗余,避免联表查询)", example = "芋艿") | ||
| 26 | + private String unitName; | ||
| 27 | + | ||
| 28 | + @Schema(description = "关联ID(关联业务表主键)", example = "24947") | ||
| 29 | + private Long relatedTaskId; | ||
| 30 | + | ||
| 31 | + @Schema(description = "业务名称(冗余)", example = "张三") | ||
| 32 | + private String relatedTaskName; | ||
| 33 | + | ||
| 34 | + @Schema(description = "本次增加积分(正数)") | ||
| 35 | + private Integer addIntegral; | ||
| 36 | + | ||
| 37 | + @Schema(description = "增加原因(如:到期前上报奖励、到期后上报奖励等)", example = "不好") | ||
| 38 | + private String addReason; | ||
| 39 | + | ||
| 40 | + @Schema(description = "增加前总积分(对账用)") | ||
| 41 | + private Integer beforeIntegral; | ||
| 42 | + | ||
| 43 | + @Schema(description = "增加后总积分(对账用)") | ||
| 44 | + private Integer afterIntegral; | ||
| 45 | + | ||
| 46 | + @Schema(description = "工单号") | ||
| 47 | + private String workNo; | ||
| 48 | + | ||
| 49 | + @Schema(description = "备注(补充积分增加的特殊说明)", example = "你说的对") | ||
| 50 | + private String remark; | ||
| 51 | + | ||
| 52 | + @Schema(description = "积分增加操作时间") | ||
| 53 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 54 | + private LocalDateTime[] createTime; | ||
| 55 | + | ||
| 56 | +} | ||
| 0 | \ No newline at end of file | 57 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/unitintegraladd/vo/UnitIntegralAddRespVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.unitintegraladd.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.*; | ||
| 5 | +import java.util.*; | ||
| 6 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 7 | +import java.time.LocalDateTime; | ||
| 8 | +import cn.idev.excel.annotation.*; | ||
| 9 | + | ||
| 10 | +@Schema(description = "管理后台 - 积分增加记录 Response VO") | ||
| 11 | +@Data | ||
| 12 | +@ExcelIgnoreUnannotated | ||
| 13 | +public class UnitIntegralAddRespVO { | ||
| 14 | + | ||
| 15 | + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12471") | ||
| 16 | + @ExcelProperty("主键ID") | ||
| 17 | + private Long id; | ||
| 18 | + | ||
| 19 | + @Schema(description = "来源类型 01:派单", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 20 | + @ExcelProperty("来源类型 01:派单") | ||
| 21 | + private String sourceType; | ||
| 22 | + | ||
| 23 | + @Schema(description = "单位类型:01:公司 02:班组 03:个人", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 24 | + @ExcelProperty("单位类型:01:公司 02:班组 03:个人") | ||
| 25 | + private String unitType; | ||
| 26 | + | ||
| 27 | + @Schema(description = "单位ID(部门表 id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "26490") | ||
| 28 | + @ExcelProperty("单位ID(部门表 id)") | ||
| 29 | + private String unitId; | ||
| 30 | + | ||
| 31 | + @Schema(description = "单位名称(冗余,避免联表查询)", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") | ||
| 32 | + @ExcelProperty("单位名称(冗余,避免联表查询)") | ||
| 33 | + private String unitName; | ||
| 34 | + | ||
| 35 | + @Schema(description = "关联ID(关联业务表主键)", requiredMode = Schema.RequiredMode.REQUIRED, example = "24947") | ||
| 36 | + @ExcelProperty("关联ID(关联业务表主键)") | ||
| 37 | + private Long relatedTaskId; | ||
| 38 | + | ||
| 39 | + @Schema(description = "业务名称(冗余)", example = "张三") | ||
| 40 | + @ExcelProperty("业务名称(冗余)") | ||
| 41 | + private String relatedTaskName; | ||
| 42 | + | ||
| 43 | + @Schema(description = "本次增加积分(正数)", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 44 | + @ExcelProperty("本次增加积分(正数)") | ||
| 45 | + private Integer addIntegral; | ||
| 46 | + | ||
| 47 | + @Schema(description = "增加原因(如:到期前上报奖励、到期后上报奖励等)", requiredMode = Schema.RequiredMode.REQUIRED, example = "不好") | ||
| 48 | + @ExcelProperty("增加原因(如:到期前上报奖励、到期后上报奖励等)") | ||
| 49 | + private String addReason; | ||
| 50 | + | ||
| 51 | + @Schema(description = "增加前总积分(对账用)") | ||
| 52 | + @ExcelProperty("增加前总积分(对账用)") | ||
| 53 | + private Integer beforeIntegral; | ||
| 54 | + | ||
| 55 | + @Schema(description = "增加后总积分(对账用)") | ||
| 56 | + @ExcelProperty("增加后总积分(对账用)") | ||
| 57 | + private Integer afterIntegral; | ||
| 58 | + | ||
| 59 | + @Schema(description = "工单号") | ||
| 60 | + @ExcelProperty("工单号") | ||
| 61 | + private String workNo; | ||
| 62 | + | ||
| 63 | + @Schema(description = "备注(补充积分增加的特殊说明)", example = "你说的对") | ||
| 64 | + @ExcelProperty("备注(补充积分增加的特殊说明)") | ||
| 65 | + private String remark; | ||
| 66 | + | ||
| 67 | + @Schema(description = "积分增加操作时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 68 | + @ExcelProperty("积分增加操作时间") | ||
| 69 | + private LocalDateTime createTime; | ||
| 70 | + | ||
| 71 | +} | ||
| 0 | \ No newline at end of file | 72 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/unitintegraladd/vo/UnitIntegralAddSaveReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.unitintegraladd.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.*; | ||
| 5 | +import java.util.*; | ||
| 6 | +import jakarta.validation.constraints.*; | ||
| 7 | + | ||
| 8 | +@Schema(description = "管理后台 - 积分增加记录新增/修改 Request VO") | ||
| 9 | +@Data | ||
| 10 | +public class UnitIntegralAddSaveReqVO { | ||
| 11 | + | ||
| 12 | + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12471") | ||
| 13 | + private Long id; | ||
| 14 | + | ||
| 15 | + @Schema(description = "来源类型 01:派单", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 16 | + @NotEmpty(message = "来源类型 01:派单不能为空") | ||
| 17 | + private String sourceType; | ||
| 18 | + | ||
| 19 | + @Schema(description = "单位类型:01:公司 02:班组 03:个人", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 20 | + @NotEmpty(message = "单位类型:01:公司 02:班组 03:个人不能为空") | ||
| 21 | + private String unitType; | ||
| 22 | + | ||
| 23 | + @Schema(description = "单位ID(部门表 id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "26490") | ||
| 24 | + @NotEmpty(message = "单位ID(部门表 id)不能为空") | ||
| 25 | + private String unitId; | ||
| 26 | + | ||
| 27 | + @Schema(description = "单位名称(冗余,避免联表查询)", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") | ||
| 28 | + @NotEmpty(message = "单位名称(冗余,避免联表查询)不能为空") | ||
| 29 | + private String unitName; | ||
| 30 | + | ||
| 31 | + @Schema(description = "关联ID(关联业务表主键)", requiredMode = Schema.RequiredMode.REQUIRED, example = "24947") | ||
| 32 | + @NotNull(message = "关联ID(关联业务表主键)不能为空") | ||
| 33 | + private Long relatedTaskId; | ||
| 34 | + | ||
| 35 | + @Schema(description = "业务名称(冗余)", example = "张三") | ||
| 36 | + private String relatedTaskName; | ||
| 37 | + | ||
| 38 | + @Schema(description = "本次增加积分(正数)", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 39 | + @NotNull(message = "本次增加积分(正数)不能为空") | ||
| 40 | + private Integer addIntegral; | ||
| 41 | + | ||
| 42 | + @Schema(description = "增加原因(如:到期前上报奖励、到期后上报奖励等)", requiredMode = Schema.RequiredMode.REQUIRED, example = "不好") | ||
| 43 | + @NotEmpty(message = "增加原因(如:到期前上报奖励、到期后上报奖励等)不能为空") | ||
| 44 | + private String addReason; | ||
| 45 | + | ||
| 46 | + @Schema(description = "增加前总积分(对账用)") | ||
| 47 | + private Integer beforeIntegral; | ||
| 48 | + | ||
| 49 | + @Schema(description = "增加后总积分(对账用)") | ||
| 50 | + private Integer afterIntegral; | ||
| 51 | + | ||
| 52 | + @Schema(description = "工单号") | ||
| 53 | + private String workNo; | ||
| 54 | + | ||
| 55 | + @Schema(description = "备注(补充积分增加的特殊说明)", example = "你说的对") | ||
| 56 | + private String remark; | ||
| 57 | + | ||
| 58 | +} | ||
| 0 | \ No newline at end of file | 59 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/unitintegralsub/UnitIntegralSubController.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.unitintegralsub; | ||
| 2 | + | ||
| 3 | +import org.springframework.web.bind.annotation.*; | ||
| 4 | +import jakarta.annotation.Resource; | ||
| 5 | +import org.springframework.validation.annotation.Validated; | ||
| 6 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 7 | +import io.swagger.v3.oas.annotations.tags.Tag; | ||
| 8 | +import io.swagger.v3.oas.annotations.Parameter; | ||
| 9 | +import io.swagger.v3.oas.annotations.Operation; | ||
| 10 | + | ||
| 11 | +import jakarta.validation.constraints.*; | ||
| 12 | +import jakarta.validation.*; | ||
| 13 | +import jakarta.servlet.http.*; | ||
| 14 | +import java.util.*; | ||
| 15 | +import java.io.IOException; | ||
| 16 | + | ||
| 17 | +import com.zteits.urbanops.framework.common.pojo.PageParam; | ||
| 18 | +import com.zteits.urbanops.framework.common.pojo.PageResult; | ||
| 19 | +import com.zteits.urbanops.framework.common.pojo.CommonResult; | ||
| 20 | +import com.zteits.urbanops.framework.common.util.object.BeanUtils; | ||
| 21 | +import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; | ||
| 22 | + | ||
| 23 | +import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; | ||
| 24 | + | ||
| 25 | +import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; | ||
| 26 | +import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*; | ||
| 27 | + | ||
| 28 | +import com.zteits.urbanops.module.garden.controller.admin.unitintegralsub.vo.*; | ||
| 29 | +import com.zteits.urbanops.module.garden.dal.dataobject.unitintegralsub.UnitIntegralSubDO; | ||
| 30 | +import com.zteits.urbanops.module.garden.service.unitintegralsub.UnitIntegralSubService; | ||
| 31 | + | ||
| 32 | +@Tag(name = "管理后台 - 积分扣减记录") | ||
| 33 | +@RestController | ||
| 34 | +@RequestMapping("/garden/unit-integral-sub") | ||
| 35 | +@Validated | ||
| 36 | +public class UnitIntegralSubController { | ||
| 37 | + | ||
| 38 | + @Resource | ||
| 39 | + private UnitIntegralSubService unitIntegralSubService; | ||
| 40 | + | ||
| 41 | + @PostMapping("/create") | ||
| 42 | + @Operation(summary = "创建积分扣减记录") | ||
| 43 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-sub:create')") | ||
| 44 | + public CommonResult<Long> createUnitIntegralSub(@Valid @RequestBody UnitIntegralSubSaveReqVO createReqVO) { | ||
| 45 | + return success(unitIntegralSubService.createUnitIntegralSub(createReqVO)); | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + @PutMapping("/update") | ||
| 49 | + @Operation(summary = "更新积分扣减记录") | ||
| 50 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-sub:update')") | ||
| 51 | + public CommonResult<Boolean> updateUnitIntegralSub(@Valid @RequestBody UnitIntegralSubSaveReqVO updateReqVO) { | ||
| 52 | + unitIntegralSubService.updateUnitIntegralSub(updateReqVO); | ||
| 53 | + return success(true); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + @DeleteMapping("/delete") | ||
| 57 | + @Operation(summary = "删除积分扣减记录") | ||
| 58 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 59 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-sub:delete')") | ||
| 60 | + public CommonResult<Boolean> deleteUnitIntegralSub(@RequestParam("id") Long id) { | ||
| 61 | + unitIntegralSubService.deleteUnitIntegralSub(id); | ||
| 62 | + return success(true); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + @DeleteMapping("/delete-list") | ||
| 66 | + @Parameter(name = "ids", description = "编号", required = true) | ||
| 67 | + @Operation(summary = "批量删除积分扣减记录") | ||
| 68 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-sub:delete')") | ||
| 69 | + public CommonResult<Boolean> deleteUnitIntegralSubList(@RequestParam("ids") List<Long> ids) { | ||
| 70 | + unitIntegralSubService.deleteUnitIntegralSubListByIds(ids); | ||
| 71 | + return success(true); | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + @GetMapping("/get") | ||
| 75 | + @Operation(summary = "获得积分扣减记录") | ||
| 76 | + @Parameter(name = "id", description = "编号", required = true, example = "1024") | ||
| 77 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-sub:query')") | ||
| 78 | + public CommonResult<UnitIntegralSubRespVO> getUnitIntegralSub(@RequestParam("id") Long id) { | ||
| 79 | + UnitIntegralSubDO unitIntegralSub = unitIntegralSubService.getUnitIntegralSub(id); | ||
| 80 | + return success(BeanUtils.toBean(unitIntegralSub, UnitIntegralSubRespVO.class)); | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + @GetMapping("/page") | ||
| 84 | + @Operation(summary = "获得积分扣减记录分页") | ||
| 85 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-sub:query')") | ||
| 86 | + public CommonResult<PageResult<UnitIntegralSubRespVO>> getUnitIntegralSubPage(@Valid UnitIntegralSubPageReqVO pageReqVO) { | ||
| 87 | + PageResult<UnitIntegralSubDO> pageResult = unitIntegralSubService.getUnitIntegralSubPage(pageReqVO); | ||
| 88 | + return success(BeanUtils.toBean(pageResult, UnitIntegralSubRespVO.class)); | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + @GetMapping("/export-excel") | ||
| 92 | + @Operation(summary = "导出积分扣减记录 Excel") | ||
| 93 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-sub:export')") | ||
| 94 | + @ApiAccessLog(operateType = EXPORT) | ||
| 95 | + public void exportUnitIntegralSubExcel(@Valid UnitIntegralSubPageReqVO pageReqVO, | ||
| 96 | + HttpServletResponse response) throws IOException { | ||
| 97 | + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | ||
| 98 | + List<UnitIntegralSubDO> list = unitIntegralSubService.getUnitIntegralSubPage(pageReqVO).getList(); | ||
| 99 | + // 导出 Excel | ||
| 100 | + ExcelUtils.write(response, "积分扣减记录.xls", "数据", UnitIntegralSubRespVO.class, | ||
| 101 | + BeanUtils.toBean(list, UnitIntegralSubRespVO.class)); | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | +} | ||
| 0 | \ No newline at end of file | 105 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/unitintegralsub/vo/UnitIntegralSubPageReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.unitintegralsub.vo; | ||
| 2 | + | ||
| 3 | +import lombok.*; | ||
| 4 | +import java.util.*; | ||
| 5 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 6 | +import com.zteits.urbanops.framework.common.pojo.PageParam; | ||
| 7 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 8 | +import java.time.LocalDateTime; | ||
| 9 | + | ||
| 10 | +import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||
| 11 | + | ||
| 12 | +@Schema(description = "管理后台 - 积分扣减记录分页 Request VO") | ||
| 13 | +@Data | ||
| 14 | +public class UnitIntegralSubPageReqVO extends PageParam { | ||
| 15 | + | ||
| 16 | + @Schema(description = "来源类型 01:派单", example = "1") | ||
| 17 | + private String sourceType; | ||
| 18 | + | ||
| 19 | + @Schema(description = "单位类型:01:公司 02:班组 03:个人", example = "1") | ||
| 20 | + private String unitType; | ||
| 21 | + | ||
| 22 | + @Schema(description = "单位ID(部门表 id)", example = "13254") | ||
| 23 | + private String unitId; | ||
| 24 | + | ||
| 25 | + @Schema(description = "单位名称(冗余,避免联表查询)", example = "芋艿") | ||
| 26 | + private String unitName; | ||
| 27 | + | ||
| 28 | + @Schema(description = "关联任务ID(外键,关联业务表主键)", example = "21804") | ||
| 29 | + private Long relatedTaskId; | ||
| 30 | + | ||
| 31 | + @Schema(description = "业务名称(冗余)", example = "芋艿") | ||
| 32 | + private String relatedTaskName; | ||
| 33 | + | ||
| 34 | + @Schema(description = "本次扣减积分(正数,存储扣减数值)") | ||
| 35 | + private Integer subIntegral; | ||
| 36 | + | ||
| 37 | + @Schema(description = "扣减原因(如:任务打回等)", example = "不香") | ||
| 38 | + private String subReason; | ||
| 39 | + | ||
| 40 | + @Schema(description = "扣减前总积分(对账用)") | ||
| 41 | + private Integer beforeIntegral; | ||
| 42 | + | ||
| 43 | + @Schema(description = "扣减后总积分(对账用)") | ||
| 44 | + private Integer afterIntegral; | ||
| 45 | + | ||
| 46 | + @Schema(description = "工单号") | ||
| 47 | + private String workNo; | ||
| 48 | + | ||
| 49 | + @Schema(description = "备注(补充扣减的特殊说明)", example = "随便") | ||
| 50 | + private String remark; | ||
| 51 | + | ||
| 52 | + @Schema(description = "积分扣减操作时间") | ||
| 53 | + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 54 | + private LocalDateTime[] createTime; | ||
| 55 | + | ||
| 56 | +} | ||
| 0 | \ No newline at end of file | 57 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/unitintegralsub/vo/UnitIntegralSubRespVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.unitintegralsub.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.*; | ||
| 5 | +import java.util.*; | ||
| 6 | +import org.springframework.format.annotation.DateTimeFormat; | ||
| 7 | +import java.time.LocalDateTime; | ||
| 8 | +import cn.idev.excel.annotation.*; | ||
| 9 | + | ||
| 10 | +@Schema(description = "管理后台 - 积分扣减记录 Response VO") | ||
| 11 | +@Data | ||
| 12 | +@ExcelIgnoreUnannotated | ||
| 13 | +public class UnitIntegralSubRespVO { | ||
| 14 | + | ||
| 15 | + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "499") | ||
| 16 | + @ExcelProperty("主键ID") | ||
| 17 | + private Long id; | ||
| 18 | + | ||
| 19 | + @Schema(description = "来源类型 01:派单", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 20 | + @ExcelProperty("来源类型 01:派单") | ||
| 21 | + private String sourceType; | ||
| 22 | + | ||
| 23 | + @Schema(description = "单位类型:01:公司 02:班组 03:个人", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 24 | + @ExcelProperty("单位类型:01:公司 02:班组 03:个人") | ||
| 25 | + private String unitType; | ||
| 26 | + | ||
| 27 | + @Schema(description = "单位ID(部门表 id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "13254") | ||
| 28 | + @ExcelProperty("单位ID(部门表 id)") | ||
| 29 | + private String unitId; | ||
| 30 | + | ||
| 31 | + @Schema(description = "单位名称(冗余,避免联表查询)", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") | ||
| 32 | + @ExcelProperty("单位名称(冗余,避免联表查询)") | ||
| 33 | + private String unitName; | ||
| 34 | + | ||
| 35 | + @Schema(description = "关联任务ID(外键,关联业务表主键)", requiredMode = Schema.RequiredMode.REQUIRED, example = "21804") | ||
| 36 | + @ExcelProperty("关联任务ID(外键,关联业务表主键)") | ||
| 37 | + private Long relatedTaskId; | ||
| 38 | + | ||
| 39 | + @Schema(description = "业务名称(冗余)", example = "芋艿") | ||
| 40 | + @ExcelProperty("业务名称(冗余)") | ||
| 41 | + private String relatedTaskName; | ||
| 42 | + | ||
| 43 | + @Schema(description = "本次扣减积分(正数,存储扣减数值)", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 44 | + @ExcelProperty("本次扣减积分(正数,存储扣减数值)") | ||
| 45 | + private Integer subIntegral; | ||
| 46 | + | ||
| 47 | + @Schema(description = "扣减原因(如:任务打回等)", requiredMode = Schema.RequiredMode.REQUIRED, example = "不香") | ||
| 48 | + @ExcelProperty("扣减原因(如:任务打回等)") | ||
| 49 | + private String subReason; | ||
| 50 | + | ||
| 51 | + @Schema(description = "扣减前总积分(对账用)") | ||
| 52 | + @ExcelProperty("扣减前总积分(对账用)") | ||
| 53 | + private Integer beforeIntegral; | ||
| 54 | + | ||
| 55 | + @Schema(description = "扣减后总积分(对账用)") | ||
| 56 | + @ExcelProperty("扣减后总积分(对账用)") | ||
| 57 | + private Integer afterIntegral; | ||
| 58 | + | ||
| 59 | + @Schema(description = "工单号") | ||
| 60 | + @ExcelProperty("工单号") | ||
| 61 | + private String workNo; | ||
| 62 | + | ||
| 63 | + @Schema(description = "备注(补充扣减的特殊说明)", example = "随便") | ||
| 64 | + @ExcelProperty("备注(补充扣减的特殊说明)") | ||
| 65 | + private String remark; | ||
| 66 | + | ||
| 67 | + @Schema(description = "积分扣减操作时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 68 | + @ExcelProperty("积分扣减操作时间") | ||
| 69 | + private LocalDateTime createTime; | ||
| 70 | + | ||
| 71 | +} | ||
| 0 | \ No newline at end of file | 72 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/unitintegralsub/vo/UnitIntegralSubSaveReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.unitintegralsub.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.*; | ||
| 5 | +import java.util.*; | ||
| 6 | +import jakarta.validation.constraints.*; | ||
| 7 | + | ||
| 8 | +@Schema(description = "管理后台 - 积分扣减记录新增/修改 Request VO") | ||
| 9 | +@Data | ||
| 10 | +public class UnitIntegralSubSaveReqVO { | ||
| 11 | + | ||
| 12 | + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "499") | ||
| 13 | + private Long id; | ||
| 14 | + | ||
| 15 | + @Schema(description = "来源类型 01:派单", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 16 | + @NotEmpty(message = "来源类型 01:派单不能为空") | ||
| 17 | + private String sourceType; | ||
| 18 | + | ||
| 19 | + @Schema(description = "单位类型:01:公司 02:班组 03:个人", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 20 | + @NotEmpty(message = "单位类型:01:公司 02:班组 03:个人不能为空") | ||
| 21 | + private String unitType; | ||
| 22 | + | ||
| 23 | + @Schema(description = "单位ID(部门表 id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "13254") | ||
| 24 | + @NotEmpty(message = "单位ID(部门表 id)不能为空") | ||
| 25 | + private String unitId; | ||
| 26 | + | ||
| 27 | + @Schema(description = "单位名称(冗余,避免联表查询)", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") | ||
| 28 | + @NotEmpty(message = "单位名称(冗余,避免联表查询)不能为空") | ||
| 29 | + private String unitName; | ||
| 30 | + | ||
| 31 | + @Schema(description = "关联任务ID(外键,关联业务表主键)", requiredMode = Schema.RequiredMode.REQUIRED, example = "21804") | ||
| 32 | + @NotNull(message = "关联任务ID(外键,关联业务表主键)不能为空") | ||
| 33 | + private Long relatedTaskId; | ||
| 34 | + | ||
| 35 | + @Schema(description = "业务名称(冗余)", example = "芋艿") | ||
| 36 | + private String relatedTaskName; | ||
| 37 | + | ||
| 38 | + @Schema(description = "本次扣减积分(正数,存储扣减数值)", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 39 | + @NotNull(message = "本次扣减积分(正数,存储扣减数值)不能为空") | ||
| 40 | + private Integer subIntegral; | ||
| 41 | + | ||
| 42 | + @Schema(description = "扣减原因(如:任务打回等)", requiredMode = Schema.RequiredMode.REQUIRED, example = "不香") | ||
| 43 | + @NotEmpty(message = "扣减原因(如:任务打回等)不能为空") | ||
| 44 | + private String subReason; | ||
| 45 | + | ||
| 46 | + @Schema(description = "扣减前总积分(对账用)") | ||
| 47 | + private Integer beforeIntegral; | ||
| 48 | + | ||
| 49 | + @Schema(description = "扣减后总积分(对账用)") | ||
| 50 | + private Integer afterIntegral; | ||
| 51 | + | ||
| 52 | + @Schema(description = "工单号") | ||
| 53 | + private String workNo; | ||
| 54 | + | ||
| 55 | + @Schema(description = "备注(补充扣减的特殊说明)", example = "随便") | ||
| 56 | + private String remark; | ||
| 57 | + | ||
| 58 | +} | ||
| 0 | \ No newline at end of file | 59 | \ No newline at end of file |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/unitintegraltotal/UnitIntegralTotalController.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.unitintegraltotal; | ||
| 2 | + | ||
| 3 | +import com.zteits.urbanops.module.garden.service.unitintegraltotal.UnitIntegralService; | ||
| 4 | +import org.springframework.web.bind.annotation.*; | ||
| 5 | +import jakarta.annotation.Resource; | ||
| 6 | +import org.springframework.validation.annotation.Validated; | ||
| 7 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 8 | +import io.swagger.v3.oas.annotations.tags.Tag; | ||
| 9 | +import io.swagger.v3.oas.annotations.Parameter; | ||
| 10 | +import io.swagger.v3.oas.annotations.Operation; | ||
| 11 | + | ||
| 12 | +import jakarta.validation.constraints.*; | ||
| 13 | +import jakarta.validation.*; | ||
| 14 | +import jakarta.servlet.http.*; | ||
| 15 | +import java.util.*; | ||
| 16 | +import java.io.IOException; | ||
| 17 | + | ||
| 18 | +import com.zteits.urbanops.framework.common.pojo.PageParam; | ||
| 19 | +import com.zteits.urbanops.framework.common.pojo.PageResult; | ||
| 20 | +import com.zteits.urbanops.framework.common.pojo.CommonResult; | ||
| 21 | +import com.zteits.urbanops.framework.common.util.object.BeanUtils; | ||
| 22 | +import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; | ||
| 23 | + | ||
| 24 | +import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; | ||
| 25 | + | ||
| 26 | +import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; | ||
| 27 | +import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*; | ||
| 28 | + | ||
| 29 | +import com.zteits.urbanops.module.garden.controller.admin.unitintegraltotal.vo.*; | ||
| 30 | +import com.zteits.urbanops.module.garden.dal.dataobject.unitintegraltotal.UnitIntegralTotalDO; | ||
| 31 | +import com.zteits.urbanops.module.garden.service.unitintegraltotal.UnitIntegralTotalService; | ||
| 32 | + | ||
| 33 | +@Tag(name = "管理后台 - 单位积分累计") | ||
| 34 | +@RestController | ||
| 35 | +@RequestMapping("/garden/unit-integral-total") | ||
| 36 | +@Validated | ||
| 37 | +public class UnitIntegralTotalController { | ||
| 38 | + | ||
| 39 | + @Resource | ||
| 40 | + private UnitIntegralTotalService unitIntegralTotalService; | ||
| 41 | + | ||
| 42 | + @Resource | ||
| 43 | + private UnitIntegralService unitIntegralService; | ||
| 44 | + | ||
| 45 | + @PostMapping("/create") | ||
| 46 | + @Operation(summary = "创建单位积分累计") | ||
| 47 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-total:create')") | ||
| 48 | + public CommonResult<Long> createUnitIntegralTotal(@Valid @RequestBody UnitIntegralTotalSaveReqVO createReqVO) { | ||
| 49 | + return success(unitIntegralTotalService.createUnitIntegralTotal(createReqVO)); | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + @PutMapping("/update") | ||
| 53 | + @Operation(summary = "更新单位积分累计") | ||
| 54 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-total:update')") | ||
| 55 | + public CommonResult<Boolean> updateUnitIntegralTotal(@Valid @RequestBody UnitIntegralTotalSaveReqVO updateReqVO) { | ||
| 56 | + unitIntegralTotalService.updateUnitIntegralTotal(updateReqVO); | ||
| 57 | + return success(true); | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + @DeleteMapping("/delete") | ||
| 61 | + @Operation(summary = "删除单位积分累计") | ||
| 62 | + @Parameter(name = "id", description = "编号", required = true) | ||
| 63 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-total:delete')") | ||
| 64 | + public CommonResult<Boolean> deleteUnitIntegralTotal(@RequestParam("id") Long id) { | ||
| 65 | + unitIntegralTotalService.deleteUnitIntegralTotal(id); | ||
| 66 | + return success(true); | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + @DeleteMapping("/delete-list") | ||
| 70 | + @Parameter(name = "ids", description = "编号", required = true) | ||
| 71 | + @Operation(summary = "批量删除单位积分累计") | ||
| 72 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-total:delete')") | ||
| 73 | + public CommonResult<Boolean> deleteUnitIntegralTotalList(@RequestParam("ids") List<Long> ids) { | ||
| 74 | + unitIntegralTotalService.deleteUnitIntegralTotalListByIds(ids); | ||
| 75 | + return success(true); | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + @GetMapping("/get") | ||
| 79 | + @Operation(summary = "获得单位积分累计") | ||
| 80 | + @Parameter(name = "id", description = "编号", required = true, example = "1024") | ||
| 81 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-total:query')") | ||
| 82 | + public CommonResult<UnitIntegralTotalRespVO> getUnitIntegralTotal(@RequestParam("id") Long id) { | ||
| 83 | + UnitIntegralTotalDO unitIntegralTotal = unitIntegralTotalService.getUnitIntegralTotal(id); | ||
| 84 | + return success(BeanUtils.toBean(unitIntegralTotal, UnitIntegralTotalRespVO.class)); | ||
| 85 | + } | ||
| 86 | + | ||
| 87 | + @GetMapping("/page") | ||
| 88 | + @Operation(summary = "获得单位积分累计分页") | ||
| 89 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-total:query')") | ||
| 90 | + public CommonResult<PageResult<UnitIntegralTotalRespVO>> getUnitIntegralTotalPage(@Valid UnitIntegralTotalPageReqVO pageReqVO) { | ||
| 91 | + PageResult<UnitIntegralTotalDO> pageResult = unitIntegralTotalService.getUnitIntegralTotalPage(pageReqVO); | ||
| 92 | + return success(BeanUtils.toBean(pageResult, UnitIntegralTotalRespVO.class)); | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + @GetMapping("/export-excel") | ||
| 96 | + @Operation(summary = "导出单位积分累计 Excel") | ||
| 97 | + @PreAuthorize("@ss.hasPermission('garden:unit-integral-total:export')") | ||
| 98 | + @ApiAccessLog(operateType = EXPORT) | ||
| 99 | + public void exportUnitIntegralTotalExcel(@Valid UnitIntegralTotalPageReqVO pageReqVO, | ||
| 100 | + HttpServletResponse response) throws IOException { | ||
| 101 | + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | ||
| 102 | + List<UnitIntegralTotalDO> list = unitIntegralTotalService.getUnitIntegralTotalPage(pageReqVO).getList(); | ||
| 103 | + // 导出 Excel | ||
| 104 | + ExcelUtils.write(response, "单位积分累计.xls", "数据", UnitIntegralTotalRespVO.class, | ||
| 105 | + BeanUtils.toBean(list, UnitIntegralTotalRespVO.class)); | ||
| 106 | + } | ||
| 107 | + | ||
| 108 | + @PostMapping ("/unitIntegralCreate") | ||
| 109 | + public void testCreate() { | ||
| 110 | + unitIntegralService.createUnitIntegral("01", "200", "测试"); | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + @PostMapping ("/unitIntegralAdd") | ||
| 114 | + public void testAdd() { | ||
| 115 | + UnitIntegralSaveReqVO updateReqVO = new UnitIntegralSaveReqVO(); | ||
| 116 | + updateReqVO.setTotalIntegral(100); | ||
| 117 | + updateReqVO.setUnitType("01"); | ||
| 118 | + updateReqVO.setUnitId("100"); | ||
| 119 | + updateReqVO.setUnitName("西城园林"); | ||
| 120 | + updateReqVO.setSourceType("01"); | ||
| 121 | + updateReqVO.setReason("测试"); | ||
| 122 | + updateReqVO.setRelatedTaskId(11111111111L); | ||
| 123 | + updateReqVO.setRelatedTaskName("任务派发"); | ||
| 124 | + | ||
| 125 | + unitIntegralService.addUnitIntegral(updateReqVO); | ||
| 126 | + } | ||
| 127 | + @PostMapping ("/unitIntegralSub") | ||
| 128 | + public void testSub() { | ||
| 129 | + UnitIntegralSaveReqVO updateReqVO = new UnitIntegralSaveReqVO(); | ||
| 130 | + updateReqVO.setTotalIntegral(100); | ||
| 131 | + updateReqVO.setUnitType("01"); | ||
| 132 | + updateReqVO.setUnitId("100"); | ||
| 133 | + updateReqVO.setUnitName("西城园林"); | ||
| 134 | + updateReqVO.setSourceType("01"); | ||
| 135 | + updateReqVO.setReason("测试"); | ||
| 136 | + updateReqVO.setRelatedTaskId(11111111112L); | ||
| 137 | + updateReqVO.setRelatedTaskName("任务派发"); | ||
| 138 | + | ||
| 139 | + unitIntegralService.subUnitIntegral(updateReqVO); | ||
| 140 | + } | ||
| 141 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/unitintegraltotal/vo/UnitIntegralRespVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.unitintegraltotal.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import lombok.Data; | ||
| 5 | + | ||
| 6 | +@Schema(description = "管理后台 - 单位积分累计新增/修改 Request VO") | ||
| 7 | +@Data | ||
| 8 | +public class UnitIntegralRespVO { | ||
| 9 | + @Schema(description = "来源类型 01:派单", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 10 | + private String sourceType; | ||
| 11 | + | ||
| 12 | + @Schema(description = "关联ID(关联业务表主键)", requiredMode = Schema.RequiredMode.REQUIRED, example = "24947") | ||
| 13 | + private Long relatedTaskId; | ||
| 14 | + | ||
| 15 | + @Schema(description = "当前总积分") | ||
| 16 | + private Integer totalIntegral; | ||
| 17 | + | ||
| 18 | + | ||
| 19 | +} |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/unitintegraltotal/vo/UnitIntegralSaveReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.garden.controller.admin.unitintegraltotal.vo; | ||
| 2 | + | ||
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 4 | +import jakarta.validation.constraints.NotEmpty; | ||
| 5 | +import jakarta.validation.constraints.NotNull; | ||
| 6 | +import lombok.Data; | ||
| 7 | +import org.apache.commons.lang3.StringUtils; | ||
| 8 | + | ||
| 9 | +import java.time.LocalDate; | ||
| 10 | +import java.time.format.DateTimeFormatter; | ||
| 11 | + | ||
| 12 | +@Schema(description = "管理后台 - 单位积分累计新增/修改 Request VO") | ||
| 13 | +@Data | ||
| 14 | +public class UnitIntegralSaveReqVO { | ||
| 15 | + @Schema(description = "查询日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "yyyy") | ||
| 16 | + private String statDate; | ||
| 17 | + | ||
| 18 | + @Schema(description = "单位类型:01:公司 02:班组 03:个人", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 19 | + @NotEmpty(message = "单位类型:01:公司 02:班组 03:个人不能为空") | ||
| 20 | + private String unitType; | ||
| 21 | + | ||
| 22 | + @Schema(description = "单位ID(部门表 id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "22785") | ||
| 23 | + @NotEmpty(message = "单位ID(部门表 id)不能为空") | ||
| 24 | + private String unitId; | ||
| 25 | + | ||
| 26 | + @Schema(description = "单位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "西城") | ||
| 27 | + @NotEmpty(message = "单位名称不能为空") | ||
| 28 | + private String unitName; | ||
| 29 | + | ||
| 30 | + @Schema(description = "当前总积分") | ||
| 31 | + private Integer totalIntegral; | ||
| 32 | + | ||
| 33 | + @Schema(description = "来源类型 01:派单", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||
| 34 | + @NotEmpty(message = "来源类型 01:派单不能为空") | ||
| 35 | + private String sourceType; | ||
| 36 | + | ||
| 37 | + @Schema(description = "关联ID(关联业务表主键)", requiredMode = Schema.RequiredMode.REQUIRED, example = "24947") | ||
| 38 | + @NotNull(message = "关联ID(关联业务表主键)不能为空") | ||
| 39 | + private Long relatedTaskId; | ||
| 40 | + | ||
| 41 | + @Schema(description = "业务名称(冗余)", example = "张三") | ||
| 42 | + private String relatedTaskName; | ||
| 43 | + | ||
| 44 | + @Schema(description = "原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "不好") | ||
| 45 | + private String reason; | ||
| 46 | + | ||
| 47 | + @Schema(description = "工单号") | ||
| 48 | + private String workNo; | ||
| 49 | + | ||
| 50 | + public String getStatDate() { | ||
| 51 | + if (StringUtils.isBlank(statDate)) { | ||
| 52 | + // 获取当前年份,转为字符串(如 2026) | ||
| 53 | + return LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy")); | ||
| 54 | + } | ||
| 55 | + // 2. 若有值,直接返回(兼容传入的年份) | ||
| 56 | + return statDate; | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + public void setStatDate(String statDate) { | ||
| 60 | + this.statDate = statDate; | ||
| 61 | + } | ||
| 62 | +} |