This is an automated email from the ASF dual-hosted git repository.

caishunfeng pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new 95c1192  [Feature-8386][Server] Custom timezone - Add timezone into 
user info (#8457)
95c1192 is described below

commit 95c119226ba8998f778ad33c5ccf836ce4bee1e9
Author: 天仇 <[email protected]>
AuthorDate: Mon Feb 21 23:28:31 2022 +0800

    [Feature-8386][Server] Custom timezone - Add timezone into user info (#8457)
    
    * [Feature-8386][Server] Custom timezone - Add timezone into user info
    
      1. Add column `time_zone varchar(32) default null` in table `t_ds_user`
      2. Add system default timezone like `GMT+08:00` when create user
      3. Add timeZone property when update user info
    
    This completes #8386
    
    * [Feature-8386][Server] Custom timezone - Add timezone into user info
    
      1. Add column `time_zone varchar(32) default null` in table `t_ds_user`
      2. Add system default timezone like `GMT+08:00` when create user
      3. Add timeZone property when update user info
      4. add ddl sql in update sql script
    
    This completes #8386
    
    * [Feature-8386][Server] Custom timezone - Add timezone into user info
    
     1. Add column `time_zone varchar(32) default null` in table `t_ds_user`
      2. Set timeZone null when create user
      3. Add timeZone property when update user info
    
    This completes #8386
    
    * [Feature-8386][Server] Custom timezone - Add timezone into user info
    
      1. Add column `time_zone varchar(32) default null` in table `t_ds_user`
      2. Set timeZone null when create user
      3. Add timeZone property when update user info
    
    This completes #8386
    
    * [Feature-8386][Server] Custom timezone - Add timezone into user info
    
      1. Add column `time_zone varchar(32) default null` in table `t_ds_user`
      2. Set timeZone null when create user
      3. Add timeZone property when update user info
    
    This completes #8386
    
    * [Feature-8386][Server] Custom timezone - Add timezone into user info
    
    1. Add column `time_zone varchar(32) default null` in table `t_ds_user`
      2. Set timeZone null when create user
      3. Add timeZone property when update user info
    
    This completes #8386
    
    * [Feature-8386][Server] Custom timezone - Add timezone into user info
    
    1. Add column `time_zone varchar(32) default null` in table `t_ds_user`
      2. Set timeZone null when create user
      3. Add timeZone property when update user info
    
    This completes #8386
---
 .../dolphinscheduler/api/controller/UsersController.java |  5 +++--
 .../org/apache/dolphinscheduler/api/enums/Status.java    |  1 +
 .../dolphinscheduler/api/service/UsersService.java       |  2 +-
 .../api/service/impl/UsersServiceImpl.java               | 13 ++++++++++++-
 .../apache/dolphinscheduler/api/utils/CheckUtils.java    | 15 +++++++++++++++
 .../dolphinscheduler/api/service/UsersServiceTest.java   |  4 ++--
 .../org/apache/dolphinscheduler/dao/entity/User.java     | 16 +++++++++++++++-
 .../apache/dolphinscheduler/dao/mapper/UserMapper.xml    |  4 ++--
 .../src/main/resources/sql/dolphinscheduler_h2.sql       |  3 ++-
 .../src/main/resources/sql/dolphinscheduler_mysql.sql    |  3 ++-
 .../main/resources/sql/dolphinscheduler_postgresql.sql   |  5 +++--
 .../upgrade/2.0.4_schema/mysql/dolphinscheduler_ddl.sql  |  2 +-
 .../upgrade/2.1.0_schema/mysql/dolphinscheduler_ddl.sql  |  2 ++
 .../2.1.0_schema/postgresql/dolphinscheduler_ddl.sql     |  2 ++
 14 files changed, 63 insertions(+), 14 deletions(-)

diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/UsersController.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/UsersController.java
index a79e5f7..da48ca7 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/UsersController.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/UsersController.java
@@ -185,8 +185,9 @@ public class UsersController extends BaseController {
                              @RequestParam(value = "email") String email,
                              @RequestParam(value = "tenantId") int tenantId,
                              @RequestParam(value = "phone", required = false) 
String phone,
-                             @RequestParam(value = "state", required = false) 
int state) throws Exception {
-        Map<String, Object> result = usersService.updateUser(loginUser, id, 
userName, userPassword, email, tenantId, phone, queue, state);
+                             @RequestParam(value = "state", required = false) 
int state,
+                             @RequestParam(value = "timeZone", required = 
false) String timeZone) throws Exception {
+        Map<String, Object> result = usersService.updateUser(loginUser, id, 
userName, userPassword, email, tenantId, phone, queue, state, timeZone);
         return returnDataList(result);
     }
 
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
index 1f6add9..729ed80 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
@@ -380,6 +380,7 @@ public enum Status {
     TASK_GROUP_STATUS_OPENED(130019,"The task group has been 
opened.","任务组已经被开启"),
     NOT_ALLOW_TO_DISABLE_OWN_ACCOUNT(130020, "Not allow to disable your own 
account", "不能停用自己的账号"),
     NOT_ALLOW_TO_DELETE_DEFAULT_ALARM_GROUP(130030, "Not allow to delete the 
default alarm group ", "不能删除默认告警组"),
+    TIME_ZONE_ILLEGAL(130031, "time zone [{0}] is illegal", "时区参数 [{0}] 不合法"),
 
     QUERY_K8S_NAMESPACE_LIST_PAGING_ERROR(1300001, "login user query k8s 
namespace list paging error", "分页查询k8s名称空间列表错误"),
     K8S_NAMESPACE_EXIST(1300002, "k8s namespace {0} already exists", 
"k8s命名空间[{0}]已存在"),
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/UsersService.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/UsersService.java
index 485702a..b303abc 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/UsersService.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/UsersService.java
@@ -130,7 +130,7 @@ public interface UsersService {
      * @throws Exception exception
      */
     Map<String, Object> updateUser(User loginUser, int userId, String 
userName, String userPassword, String email,
-                                   int tenantId, String phone, String queue, 
int state) throws IOException;
+                                   int tenantId, String phone, String queue, 
int state, String timeZone) throws IOException;
 
     /**
      * delete user
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/UsersServiceImpl.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/UsersServiceImpl.java
index b057bae..b6ec2c3 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/UsersServiceImpl.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/UsersServiceImpl.java
@@ -349,6 +349,8 @@ public class UsersServiceImpl extends BaseServiceImpl 
implements UsersService {
      * @param tenantId tenant id
      * @param phone phone
      * @param queue queue
+     * @param state state
+     * @param timeZone timeZone
      * @return update result code
      * @throws Exception exception
      */
@@ -360,7 +362,8 @@ public class UsersServiceImpl extends BaseServiceImpl 
implements UsersService {
                                           int tenantId,
                                           String phone,
                                           String queue,
-                                          int state) throws IOException {
+                                          int state,
+                                          String timeZone) throws IOException {
         Map<String, Object> result = new HashMap<>();
         result.put(Constants.STATUS, false);
 
@@ -413,6 +416,14 @@ public class UsersServiceImpl extends BaseServiceImpl 
implements UsersService {
             return result;
         }
 
+        if (StringUtils.isNotEmpty(timeZone)) {
+            if (!CheckUtils.checkTimeZone(timeZone)) {
+                putMsg(result, Status.TIME_ZONE_ILLEGAL, timeZone);
+                return result;
+            }
+            user.setTimeZone(timeZone);
+        }
+
         user.setPhone(phone);
         user.setQueue(queue);
         user.setState(state);
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/CheckUtils.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/CheckUtils.java
index 3891087..2e84a14 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/CheckUtils.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/CheckUtils.java
@@ -29,6 +29,7 @@ import org.apache.commons.lang.StringUtils;
 import org.hibernate.validator.internal.constraintvalidators.bv.EmailValidator;
 
 import java.text.MessageFormat;
+import java.time.ZoneId;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.regex.Pattern;
@@ -122,6 +123,20 @@ public class CheckUtils {
     }
 
     /**
+     * check time zone parameter
+     * @param timeZone timeZone
+     * @return true if timeZone is valid, otherwise return false
+     */
+    public static boolean checkTimeZone(String timeZone) {
+        try {
+            ZoneId.of(timeZone);
+            return true;
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+    /**
      * check task node parameter
      *
      * @param taskNode TaskNode
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/UsersServiceTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/UsersServiceTest.java
index 36a313b..5361205 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/UsersServiceTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/UsersServiceTest.java
@@ -269,13 +269,13 @@ public class UsersServiceTest {
         String userPassword = "userTest0001";
         try {
             //user not exist
-            Map<String, Object> result = 
usersService.updateUser(getLoginUser(), 0, userName, userPassword, 
"[email protected]", 1, "13457864543", "queue", 1);
+            Map<String, Object> result = 
usersService.updateUser(getLoginUser(), 0, userName, userPassword, 
"[email protected]", 1, "13457864543", "queue", 1, "Asia/Shanghai");
             Assert.assertEquals(Status.USER_NOT_EXIST, 
result.get(Constants.STATUS));
             logger.info(result.toString());
 
             //success
             when(userMapper.selectById(1)).thenReturn(getUser());
-            result = usersService.updateUser(getLoginUser(), 1, userName, 
userPassword, "[email protected]", 1, "13457864543", "queue", 1);
+            result = usersService.updateUser(getLoginUser(), 1, userName, 
userPassword, "[email protected]", 1, "13457864543", "queue", 1, "Asia/Shanghai");
             logger.info(result.toString());
             Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
         } catch (Exception e) {
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/User.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/User.java
index 2110fe2..a7445ed 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/User.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/User.java
@@ -97,6 +97,11 @@ public class  User {
     private String queue;
 
     /**
+     * time zone
+     */
+    private String timeZone;
+
+    /**
      * create time
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@@ -221,6 +226,14 @@ public class  User {
         this.state = state;
     }
 
+    public String getTimeZone() {
+        return timeZone;
+    }
+
+    public void setTimeZone(String timeZone) {
+        this.timeZone = timeZone;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o) {
@@ -260,7 +273,8 @@ public class  User {
                 ", tenantCode='" + tenantCode + '\'' +
                 ", queueName='" + queueName + '\'' +
                 ", alertGroup='" + alertGroup + '\'' +
-                ", queue='" + queue + '\'' +
+                ", queue='" + queue + '\''  +
+                ", timeZone='" + timeZone + '\'' +
                 ", createTime=" + createTime +
                 ", updateTime=" + updateTime +
                 '}';
diff --git 
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/UserMapper.xml
 
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/UserMapper.xml
index 570e395..b105679 100644
--- 
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/UserMapper.xml
+++ 
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/UserMapper.xml
@@ -19,11 +19,11 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"; >
 <mapper namespace="org.apache.dolphinscheduler.dao.mapper.UserMapper">
     <sql id="baseSql">
-       id, user_name, user_password, user_type, email, phone, tenant_id, 
create_time, update_time, queue, state
+       id, user_name, user_password, user_type, email, phone, tenant_id, 
create_time, update_time, queue, state, time_zone
     </sql>
     <sql id="baseSqlV2">
        ${alias}.id, ${alias}.user_name, ${alias}.user_password, 
${alias}.user_type, ${alias}.email, ${alias}.phone, ${alias}.tenant_id,
-       ${alias}.create_time, ${alias}.update_time, ${alias}.queue, 
${alias}.state
+       ${alias}.create_time, ${alias}.update_time, ${alias}.queue, 
${alias}.state, ${alias}.time_zone
     </sql>
     <select id="queryAllGeneralUser" 
resultType="org.apache.dolphinscheduler.dao.entity.User">
         select
diff --git 
a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql 
b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql
index 8aa897d..1da410e 100644
--- a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql
+++ b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql
@@ -921,6 +921,7 @@ CREATE TABLE t_ds_user
     update_time   datetime    DEFAULT NULL,
     queue         varchar(64) DEFAULT NULL,
     state         int(1) DEFAULT 1,
+    time_zone     varchar(32) DEFAULT NULL,
     PRIMARY KEY (id),
     UNIQUE KEY user_name_unique (user_name)
 );
@@ -979,7 +980,7 @@ VALUES ('1,2', 1, 'default admin warning group', 'default 
admin warning group',
 -- ----------------------------
 INSERT INTO t_ds_user
 VALUES ('1', 'admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', '[email protected]', 
'', '0', '2018-03-27 15:48:50',
-        '2018-10-24 17:40:22', null, 1);
+        '2018-10-24 17:40:22', null, 1, null);
 
 -- ----------------------------
 -- Table structure for t_ds_plugin_define
diff --git 
a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql 
b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql
index 24c1d18..d70c6b8d 100644
--- a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql
+++ b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql
@@ -911,6 +911,7 @@ CREATE TABLE `t_ds_user` (
   `update_time` datetime DEFAULT NULL COMMENT 'update time',
   `queue` varchar(64) DEFAULT NULL COMMENT 'queue',
   `state` tinyint(4) DEFAULT '1' COMMENT 'state 0:disable 1:enable',
+  `time_zone` varchar(32) DEFAULT NULL COMMENT 'time zone',
   PRIMARY KEY (`id`),
   UNIQUE KEY `user_name_unique` (`user_name`)
 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
@@ -964,7 +965,7 @@ VALUES ("1,2", 1, 'default admin warning group', 'default 
admin warning group',
 -- Records of t_ds_user
 -- ----------------------------
 INSERT INTO `t_ds_user`
-VALUES ('1', 'admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', '[email protected]', 
'', '0', '2018-03-27 15:48:50', '2018-10-24 17:40:22', null, 1);
+VALUES ('1', 'admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', '[email protected]', 
'', '0', '2018-03-27 15:48:50', '2018-10-24 17:40:22', null, 1, null);
 
 -- ----------------------------
 -- Table structure for t_ds_plugin_define
diff --git 
a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql 
b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql
index 8fdd071..225e3c4 100644
--- 
a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql
+++ 
b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql
@@ -805,6 +805,7 @@ CREATE TABLE t_ds_user (
   update_time timestamp DEFAULT NULL ,
   queue varchar(64) DEFAULT NULL ,
   state int DEFAULT 1 ,
+  time_zone varchar(32) DEFAULT NULL,
   PRIMARY KEY (id)
 );
 comment on column t_ds_user.state is 'state 0:disable 1:enable';
@@ -947,8 +948,8 @@ ALTER TABLE t_ds_worker_server ALTER COLUMN id SET DEFAULT 
NEXTVAL('t_ds_worker_
 
 
 -- Records of t_ds_user?user : admin , password : dolphinscheduler123
-INSERT INTO t_ds_user(user_name, user_password, user_type, email, phone, 
tenant_id, state, create_time, update_time)
-VALUES ('admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', '[email protected]', '', 
'0', 1, '2018-03-27 15:48:50', '2018-10-24 17:40:22');
+INSERT INTO t_ds_user(user_name, user_password, user_type, email, phone, 
tenant_id, state, create_time, update_time, time_zone)
+VALUES ('admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', '[email protected]', '', 
'0', 1, '2018-03-27 15:48:50', '2018-10-24 17:40:22', 'Asia/Shanghai');
 
 -- Records of t_ds_alertgroup, default admin warning group
 INSERT INTO t_ds_alertgroup(alert_instance_ids, create_user_id, group_name, 
description, create_time, update_time)
diff --git 
a/dolphinscheduler-dao/src/main/resources/sql/upgrade/2.0.4_schema/mysql/dolphinscheduler_ddl.sql
 
b/dolphinscheduler-dao/src/main/resources/sql/upgrade/2.0.4_schema/mysql/dolphinscheduler_ddl.sql
index 4a14f32..38964cc 100644
--- 
a/dolphinscheduler-dao/src/main/resources/sql/upgrade/2.0.4_schema/mysql/dolphinscheduler_ddl.sql
+++ 
b/dolphinscheduler-dao/src/main/resources/sql/upgrade/2.0.4_schema/mysql/dolphinscheduler_ddl.sql
@@ -13,4 +13,4 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
-*/
+*/
\ No newline at end of file
diff --git 
a/dolphinscheduler-dao/src/main/resources/sql/upgrade/2.1.0_schema/mysql/dolphinscheduler_ddl.sql
 
b/dolphinscheduler-dao/src/main/resources/sql/upgrade/2.1.0_schema/mysql/dolphinscheduler_ddl.sql
index 5f66888..0723715 100644
--- 
a/dolphinscheduler-dao/src/main/resources/sql/upgrade/2.1.0_schema/mysql/dolphinscheduler_ddl.sql
+++ 
b/dolphinscheduler-dao/src/main/resources/sql/upgrade/2.1.0_schema/mysql/dolphinscheduler_ddl.sql
@@ -27,6 +27,8 @@ alter table t_ds_task_definition_log add 
`task_group_priority` int(11) DEFAULT N
 alter table t_ds_task_definition add `task_group_id` int(11) DEFAULT NULL 
COMMENT 'task group id' AFTER `resource_ids`;
 alter table t_ds_task_definition add `task_group_priority` int(11) DEFAULT '0' 
COMMENT 'task group id' AFTER `task_group_id`;
 
+ALTER TABLE `t_ds_user` ADD COLUMN `time_zone` varchar(32) DEFAULT NULL 
COMMENT 'time zone';
+
 --
 -- Table structure for table `t_ds_dq_comparison_type`
 --
diff --git 
a/dolphinscheduler-dao/src/main/resources/sql/upgrade/2.1.0_schema/postgresql/dolphinscheduler_ddl.sql
 
b/dolphinscheduler-dao/src/main/resources/sql/upgrade/2.1.0_schema/postgresql/dolphinscheduler_ddl.sql
index 3d62647..fc30b0f 100644
--- 
a/dolphinscheduler-dao/src/main/resources/sql/upgrade/2.1.0_schema/postgresql/dolphinscheduler_ddl.sql
+++ 
b/dolphinscheduler-dao/src/main/resources/sql/upgrade/2.1.0_schema/postgresql/dolphinscheduler_ddl.sql
@@ -38,6 +38,8 @@ EXECUTE 'CREATE INDEX IF NOT EXISTS 
process_task_relation_log_idx_project_code_p
 EXECUTE 'DROP INDEX IF EXISTS "idx_task_definition_log_code_version"';
 EXECUTE 'CREATE INDEX IF NOT EXISTS idx_task_definition_log_code_version ON ' 
|| quote_ident(v_schema) ||'.t_ds_task_definition_log USING 
Btree("code","version")';
 
+EXECUTE 'ALTER TABLE ' || quote_ident(v_schema) ||'.t_ds_user ADD COLUMN IF 
NOT EXISTS "time_zone" varchar(32) DEFAULT NULL';
+
 EXECUTE 'CREATE TABLE IF NOT EXISTS' || quote_ident(v_schema) 
||'."t_ds_dq_comparison_type" (
         id serial NOT NULL,
         "type" varchar NOT NULL,

Reply via email to