Explorar el Código

java后端框架

2643616413 hace 1 semana
padre
commit
404a5363b9
Se han modificado 24 ficheros con 1163 adiciones y 0 borrados
  1. 68 0
      server/.gitignore
  2. 37 0
      server/pom.xml
  3. 128 0
      server/yusp-tagging-core/pom.xml
  4. 47 0
      server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/config/RedisConfig.java
  5. 27 0
      server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/controller/TestController.java
  6. 12 0
      server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/service/Test.java
  7. 15 0
      server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/service/impl/TestImplService.java
  8. 49 0
      server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/util/DataUtil.java
  9. BIN
      server/yusp-tagging-core/src/main/resources/cert/pwd_private.key
  10. BIN
      server/yusp-tagging-core/src/main/resources/cert/pwd_public.key
  11. 14 0
      server/yusp-tagging-core/src/main/resources/mapper/DetailCrRuleMapper.xml
  12. 69 0
      server/yusp-tagging-core/src/main/resources/mapper/DetailFillTaskInsMapper.xml
  13. 99 0
      server/yusp-tagging-core/src/main/resources/messages/yusp_input_msg.properties
  14. 99 0
      server/yusp-tagging-core/src/main/resources/messages/yusp_input_msg_en.properties
  15. 99 0
      server/yusp-tagging-core/src/main/resources/messages/yusp_input_msg_zh.properties
  16. BIN
      server/yusp-tagging-core/src/main/resources/template/detail_col_template.xlsx
  17. 233 0
      server/yusp-tagging-starter/pom.xml
  18. 15 0
      server/yusp-tagging-starter/src/main/java/cn/com/yusys/yusp/detail/App.java
  19. 2 0
      server/yusp-tagging-starter/src/main/resources/application.yml
  20. 19 0
      server/yusp-tagging-starter/src/main/resources/bootstrap.yml
  21. 8 0
      server/yusp-tagging-starter/src/main/scripts/deploy.sh
  22. 17 0
      server/yusp-tagging-starter/src/main/scripts/shutdown.sh
  23. 1 0
      server/yusp-tagging-starter/src/main/scripts/startup.cmd
  24. 105 0
      server/yusp-tagging-starter/src/main/scripts/startup.sh

+ 68 - 0
server/.gitignore

@@ -0,0 +1,68 @@
+#built application files
+*.apk
+*.ap_
+ 
+ # Files for the Dalvik VM
+ *.dex
+  
+# Java class files
+*.class
+# Generated files
+*/bin/
+*/gen/
+*/out/
+# Gradle files
+.gradle/
+build/
+*/build/
+gradlew
+gradlew.bat
+# Local configuration file (sdk path, etc)
+local.properties
+# Proguard folder generated by Eclipse
+proguard/
+# Log Files
+*.log
+# Android Studio Navigation editor temp files
+.navigation/
+ 
+# Android Studio captures folder
+captures/
+# Intellij
+*.iml
+*/*.iml
+# Keystore files
+#*.jks
+#gradle wrapper
+gradle/
+#some local files
+*/.settings/
+*/.DS_Store
+.DS_Store
+*/.idea/
+.idea/
+gradlew
+gradlew.bat
+unused.txt
+target/
+.project
+.settings/
+.classpath
+.svn
+.iml
+.txt
+/bin/
+/.idea/
+/.idea/
+/yusp-app-zuul/yusp-app-zuul-gateway-starter/target/
+/.idea
+/yusp-app-zuul/yusp-app-zuul-gateway-starter/target
+/yusp-app-single-starter/target
+/out
+/yusp-app-common/yusp-app-common-micro-starter/servers/yusp-common.jar
+/yusp-app-job/servers/yusp-job.jar
+/yusp-app-oca/yusp-app-oca-micro-starter/servers/yusp-oca.jar
+/yusp-app-uaa/yusp-uaa-starter/servers/yusp-uaa.jar
+/yusp-app-zuul/yusp-app-zuul-gateway-starter/servers/yusp-gateway.jar
+/yusp-oca-sh_18504.log.2023-07-13.0.gz
+/yusp-uaa-sh_18505.log.2023-07-12.0.gz

+ 37 - 0
server/pom.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>cn.com.yusys.yusp</groupId>
+    <parent>
+        <artifactId>yusp-dependencies</artifactId>
+        <groupId>cn.com.yusys.yusp</groupId>
+        <version>V3.3.2.20220606.RELEASE</version>
+    </parent>
+    <artifactId>server</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+    <properties>
+        <!-- 文件拷贝时的编码 -->
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <!-- 编译时的编码 -->
+        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
+        <java.version>1.8</java.version>
+        <yusp.flow.version>V3.3.2.20220606.RELEASE</yusp.flow.version>
+        <yusp.file.version>V3.3.2.20220606.RELEASE</yusp.file.version>
+        <ojdbc8.version>19.3.0.0</ojdbc8.version>
+        <dynamic.datasource.version>3.4.1</dynamic.datasource.version>
+    </properties>
+    <!-- 模块 -->
+    <modules>
+        <module>yusp-tagging-core</module>
+        <module>yusp-tagging-starter</module>
+    </modules>
+    <name>server</name>
+
+
+</project>

+ 128 - 0
server/yusp-tagging-core/pom.xml

@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>cn.com.yusys.yusp</groupId>
+    <parent>
+        <artifactId>server</artifactId>
+        <groupId>cn.com.yusys.yusp</groupId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>yusp-tagging-core</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+
+    <dependencies>
+
+
+        <dependency>
+            <groupId>cn.com.yusys.yusp.common</groupId>
+            <artifactId>yusp-commons-starter-redis</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.poi</groupId>
+                    <artifactId>poi</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.poi</groupId>
+                    <artifactId>poi-ooxml</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.poi</groupId>
+                    <artifactId>poi-ooxml-schemas</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.poi</groupId>
+                    <artifactId>poi</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.poi</groupId>
+                    <artifactId>poi-ooxml</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.poi</groupId>
+                    <artifactId>poi-ooxml-schemas</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>javax.validation</groupId>
+            <artifactId>validation-api</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.poi</groupId>
+                    <artifactId>poi</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.poi</groupId>
+                    <artifactId>poi-ooxml</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.poi</groupId>
+                    <artifactId>poi-ooxml-schemas</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.83</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.poi</groupId>
+                    <artifactId>poi</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.poi</groupId>
+                    <artifactId>poi-ooxml</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.poi</groupId>
+                    <artifactId>poi-ooxml-schemas</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.session</groupId>
+            <artifactId>spring-session-data-redis</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.poi</groupId>
+                    <artifactId>poi</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.poi</groupId>
+                    <artifactId>poi-ooxml</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.poi</groupId>
+                    <artifactId>poi-ooxml-schemas</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-web</artifactId>
+            <version>5.3.33</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.17.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>5.2.5</version>
+        </dependency>
+
+    </dependencies>
+</project>

+ 47 - 0
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/config/RedisConfig.java

@@ -0,0 +1,47 @@
+package cn.com.yusys.yusp.config;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
+import org.springframework.context.annotation.Bean;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+/**
+ * @模块 : 标题
+ * @作者 : PrimaryKeyEnoch
+ * @时间 : 2021/11/29 18 : 11
+ * @描述 : 简述
+ */
+
+
+public class RedisConfig {
+
+    @Bean
+    public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory factory){
+
+        RedisTemplate<Object,Object> redisTemplate = new RedisTemplate<Object,Object>();
+        redisTemplate.setConnectionFactory(factory);
+        // 定义jackson2JsonRedisSerializer对象 这里使用jackson进行序列化
+        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
+        ObjectMapper objectMapper = new ObjectMapper();
+        // 指定要序列化的域,包括public private等
+        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        // 指定序列化的类型,类必须是非final修饰的才可以
+        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL);
+        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
+        // key 序列化方式用string
+        redisTemplate.setKeySerializer(new StringRedisSerializer());
+        //value 方式用json存储
+        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
+        // hash存储方式
+        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
+        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
+
+        redisTemplate.afterPropertiesSet();
+        return redisTemplate;
+    }
+}

+ 27 - 0
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/controller/TestController.java

@@ -0,0 +1,27 @@
+package cn.com.yusys.yusp.controller;
+
+
+import cn.com.yusys.yusp.service.impl.TestImplService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 触发器管理
+ * @Author wangshuai
+ * @创建时间: 2024-03-18 16:05:08
+ * -------------------------------------------------------------
+ * @Copyright (c) 宇信科技-版权所有
+ */
+@RestController
+@RequestMapping("/api/test")
+public class TestController {
+    @Autowired
+    private TestImplService test;
+
+    @GetMapping("/")
+    public String test(){
+        return "test1";
+    }
+}

+ 12 - 0
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/service/Test.java

@@ -0,0 +1,12 @@
+package cn.com.yusys.yusp.service;
+
+/**
+ * 触发器管理
+ * @Author wangshuai
+ * @创建时间: 2024-03-18 16:05:08
+ * -------------------------------------------------------------
+ * @Copyright (c) 宇信科技-版权所有
+ */
+public interface Test{
+
+}

+ 15 - 0
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/service/impl/TestImplService.java

@@ -0,0 +1,15 @@
+package cn.com.yusys.yusp.service.impl;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * 触发器管理
+ * @Author wangshuai
+ * @创建时间: 2024-03-18 16:05:08
+ * -------------------------------------------------------------
+ * @Copyright (c) 宇信科技-版权所有
+ */
+@Service
+public class TestImplService {
+
+}

+ 49 - 0
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/util/DataUtil.java

@@ -0,0 +1,49 @@
+package cn.com.yusys.yusp.util;
+
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.regex.Pattern;
+
+public class DataUtil {
+
+
+    public static  String getDecimalFormatStr(String num) {
+        StringBuilder sb = new StringBuilder("");
+        Pattern pattern = Pattern.compile("[0-9]*");
+        if (num != null && !"".equals(num)) {
+            if (pattern.matcher(num).matches()) { //如果输入的是一个正整数
+                int n = Integer.valueOf(num);
+                if (n < 1) {
+                    return sb.toString();
+                }
+                sb.append("0.");
+                for (int i = 0; i < n; i++) {
+                    sb.append("0");
+                }
+            }
+        } else {//对于整型,num就是空字符串
+            sb.append("#");
+        }
+        return sb.toString();
+    }
+
+    public static String listToStringForSqlInClause(List<String> list) {
+        StringBuilder sb = new StringBuilder();
+        sb.append("(");
+        for (int i = 0; i < list.size(); i++) {
+            sb.append("'").append(list.get(i)).append("'");
+            if (i < list.size() - 1) {
+                sb.append(",");
+            }
+        }
+        sb.append(")");
+        return sb.toString();
+    }
+
+    public static String DateToString(Date date) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return sdf.format(date);
+    }
+}

BIN
server/yusp-tagging-core/src/main/resources/cert/pwd_private.key


BIN
server/yusp-tagging-core/src/main/resources/cert/pwd_public.key


+ 14 - 0
server/yusp-tagging-core/src/main/resources/mapper/DetailCrRuleMapper.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="cn.com.yusys.yusp.detail.dao.DetailCrRuleMapper">
+    <update id="updateDetailCrRuleSts">
+        update detail_cr_rule set rule_sts=#{ruleSts} where
+        busi_no=#{busiNo} and rule_id in
+        <foreach open="(" collection="ruleIdList" item="ruleId" separator="," close=")" index="index">
+            <if test="index%999==998">
+                ) or rule_id in (
+            </if>
+            #{ruleId}
+        </foreach>
+    </update>
+</mapper>

+ 69 - 0
server/yusp-tagging-core/src/main/resources/mapper/DetailFillTaskInsMapper.xml

@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="cn.com.yusys.yusp.detail.dao.DetailFillTaskInsMapper">
+    <select id="selectAuthOrgList" parameterType="string" resultType="cn.com.yusys.yusp.client.domain.vo.BioneIssuedOrgInfoVo">
+        select
+               T0.busi_no,T0.org_NO,
+               T0.org_name,
+               g.org_name as up_org_name,
+               T0.up_org_no,
+               T0.org_level,
+               T0.org_sts,
+               T0.namespace,
+               T0.finance_org_no
+        from admin_sm_user_issued_org_rel r  left join bione_issued_org_info T0 on r.org_no = T0.org_no and r.busi_no = T0.busi_no
+                 LEFT JOIN bione_issued_org_info g ON g.org_no = T0.up_org_no and g.busi_no = T0.busi_no
+            where T0.ORG_STS =#{orgSts,jdbcType=VARCHAR}
+            and T0.busi_no =#{busiNo,jdbcType=VARCHAR}
+    </select>
+
+    <update id="updateInitTaskInsCount">
+        update ${busiNo}_fill_task_ins fill
+        set fill.init_task_ins_count =
+        (
+        select count(1) from ${busiNo}_fill_task_child_ins ins
+        where ins.task_ins_id = fill.task_ins_id
+        and ins.task_sts = '1'
+        )
+        <where>
+            fill.task_ins_id in (
+            <foreach collection="list" separator="," item="id">
+                #{id}
+            </foreach>
+            )
+        </where>
+    </update>
+    <update id="updateUnFillTaskInsCount">
+        update ${busiNo}_fill_task_ins fill
+        set fill.un_fill_task_ins_count =
+        (
+        select count(1) from ${busiNo}_fill_task_child_ins ins
+        where ins.task_ins_id = fill.task_ins_id
+        and ins.task_sts in ('2','3', '6')
+        )
+        <where>
+            fill.task_ins_id in (
+            <foreach collection="list" separator="," item="id">
+                #{id}
+            </foreach>
+            )
+        </where>
+    </update>
+
+    <update id="updateSubmitInsCount">
+        update ${busiNo}_fill_task_ins fill
+        set fill.submit_task_ins_count =
+        (
+        select count(1) from ${busiNo}_fill_task_child_ins ins
+        where ins.task_ins_id = fill.task_ins_id
+        and ins.task_sts = '9'
+        )
+        <where>
+            fill.task_ins_id in (
+            <foreach collection="list" separator="," item="id">
+                #{id}
+            </foreach>
+            )
+        </where>
+    </update>
+</mapper>

+ 99 - 0
server/yusp-tagging-core/src/main/resources/messages/yusp_input_msg.properties

@@ -0,0 +1,99 @@
+SUCCESS=\u64CD\u4F5C\u6210\u529F
+RESTART_TASK_COMPLETION=\u5B58\u5728\u6B63\u5728\u8FD0\u884C\u7684\u4EFB\u52A1\uFF0C\u8BF7\u7B49\u5F85\u8FD0\u884C\u7ED3\u675F\u540E\u91CD\u65B0\u542F\u52A8
+MISSING_OR_EMPTY_PARAMS=\u8BF7\u6C42\u53C2\u6570\u7F3A\u5931\u6216\u4E3A\u7A7A
+MODULE_CODE_REQUIRED=\u6A21\u5757\u7F16\u53F7\u4E0D\u80FD\u4E3A\u7A7A
+CODE_ITEMS_REQUIRED=\u7801\u503C\u4EE3\u7801\u9879\u5217\u8868\u4E0D\u80FD\u4E3A\u7A7A
+REPORT_ID_REQUIRED=\u53C2\u6570\u62A5\u8868ID\u4E0D\u5141\u8BB8\u4E3A\u7A7A
+DELETE_FAILED_EXCEPTION=\u5220\u9664\u5931\u8D25,\u5F02\u5E38\u4FE1\u606F\u4E3A:{0}
+TASK_RUNNING_CANNOT_DELETE=\u5220\u9664\u5931\u8D25,\u6240\u9009\u4EFB\u52A1\u4ECD\u5728\u5F15\u64CE\u961F\u5217\u8FD0\u884C\u4E2D,\u8BF7\u7A0D\u540E\u91CD\u8BD5
+OPERATION_FAILED=\u7CFB\u7EDF\u5F02\u5E38
+OPERATION_FAILED_PARAM=\u7CFB\u7EDF\u5F02\u5E38:{0}
+UNLOCKED_RULES_EXIST=\u5B58\u5728\u672A\u89E3\u9501\u7684\u89C4\u5219\uFF0C\u5220\u9664\u5931\u8D25
+UNLOCKED_RULES_EXIST_CANNOT_IMPORT=\u5B58\u5728\u672A\u89E3\u9501\u7684\u89C4\u5219\uFF0C\u65E0\u6CD5\u5BFC\u5165
+QUEUED_TASK_REQUIRED=\u53EA\u80FD\u9009\u62E9\u6392\u961F\u4E2D\u7684\u4EFB\u52A1
+TASK_CONFIG_NOT_EXIST=\u5F53\u524D\u4EFB\u52A1\u914D\u7F6E\u4E0D\u5B58\u5728
+MANUAL_DISPATCH_NOT_ALLOWED=\u5F53\u524D\u4EFB\u52A1\u4E0D\u80FD\u624B\u52A8\u4E0B\u53D1
+DEADLINE_CANNOT_BE_PAST=\u4EFB\u52A1\u622A\u6B62\u65F6\u95F4\u4E0D\u80FD\u5C0F\u4E8E\u5F53\u524D\u65E5\u671F
+SELECT_TASK_TO_START=\u8BF7\u9009\u62E9\u8981\u5F00\u542F\u7684\u4EFB\u52A1
+NO_SUBTASKS_EXIST=\u5F53\u524D\u6240\u9009\u4EFB\u52A1\uFF0C\u4E0D\u5B58\u5728\u5B50\u4EFB\u52A1
+SELECT_TASK_TO_RECOVER=\u8BF7\u9009\u62E9\u5F85\u5F00\u542F\u6216\u586B\u62A5\u4E2D\u7684\u4EFB\u52A1\u8FDB\u884C\u56DE\u6536
+FORCE_COMPLETE_NOT_ALLOWED=\u5F53\u524D\u72B6\u6001\u4E0D\u5141\u8BB8\u5F3A\u5236\u5B8C\u6210
+NO_REISSUE_TASK=\u5F53\u524D\u4E0D\u5B58\u5728\u53EF\u8865\u53D1\u4EFB\u52A1\uFF0C\u60A8\u53EF\u901A\u8FC7\u4E0B\u53D1\u6765\u53D1\u8D77\u4EFB\u52A1
+NO_DISABLED_SUBTASKS=\u5F53\u524D\u6240\u9009\u4EFB\u52A1\uFF0C\u4E0D\u5B58\u5728\u672A\u5F00\u542F\u7684\u5B50\u4EFB\u52A1
+FORCE_UNLOCK_COMPLETED_TASK_ONLY=\u53EA\u80FD\u5F3A\u5236\u89E3\u9501\u5DF2\u5B8C\u6210\u7684\u4EFB\u52A1
+NO_NEW_OR_UNLOCKED_RULES_IN_EXCEL=\u5F53\u524D\u5BFC\u5165\u7684excel\u4E2D\u65E0\u65B0\u589E\u548C\u89E3\u9501\u7684\u89C4\u5219\uFF0C\u5BFC\u5165\u4E3A\u7A7A
+REQUESTER_DEVELOPER_TESTER_INFO_REQUIRED=\u63D0\u51FA\u4EBA\u3001\u63D0\u51FA\u65F6\u95F4\u3001\u5F00\u53D1\u4EBA\u3001\u5F00\u53D1\u65F6\u95F4\u3001\u6D4B\u8BD5\u4EBA\u3001\u6D4B\u8BD5\u65F6\u95F4\u5747\u4E0D\u53EF\u4E3A\u7A7A
+NO_CHANGES_IN_IMPORTED_RULES=\u5F53\u524D\u5BFC\u5165\u7684excel\u4E2D\u7684\u89C4\u5219\u65E0\u53D8\u5316\uFF0C\u65E0\u9700\u5BFC\u5165
+UPLOAD_FILE_CANNOT_BE_EMPTY=\u4E0A\u4F20\u6587\u4EF6\u4E0D\u80FD\u4E3A\u7A7A\uFF0C\u8BF7\u586B\u5199\u540E\u518D\u4E0A\u4F20
+IMMEDIATE_RUN_TASK_EXCEPTION=\u7ACB\u5373\u8FD0\u884C\u4E00\u4E2A\u4EFB\u52A1\u65F6\u5F02\u5E38
+USER_NO_ORG_OR_LINE_PERMISSION=\u5F53\u524D\u7528\u6237\u65E0\u673A\u6784\u6216\u8005\u6761\u7EBF\u7684\u6743\u9650
+DATA_DICT_REQUIRED=\u8BF7\u914D\u7F6E\u6570\u636E\u5B57\u5178
+SINGLE_CHECK_FAILED=\u5355\u6761\u68C0\u67E5\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u5F15\u64CE\u72B6\u6001
+PENDING_TASK_EXISTS=\u6240\u9009\u4EFB\u52A1\u5B58\u5728\u8FDB\u884C\u4E2D\u7684\u4EFB\u52A1\uFF0C\u8BF7\u7A0D\u540E\u542F\u52A8
+DISABLED_DATA_OPERATION_ONLY=\u53EA\u80FD\u64CD\u4F5C\u505C\u7528\u7684\u6570\u636E
+DICTIONARY_ITEM_REQUIRED=\u5B57\u5178\u9879\u4E0D\u80FD\u4E3A\u7A7A
+DICTIONARY_CODE_EXISTS=\u5B57\u5178\u4EE3\u7801:{0}\u5DF2\u5B58\u5728
+DICTIONARY_ITEM_DUPLICATE_NOT_ALLOWED=\u5B57\u5178\u9879\u4E0D\u80FD\u91CD\u590D
+LOGIN_TIMEOUT=\u767B\u5F55\u8D85\u65F6
+FILE_GEN_DIR_CREATE_FAIL=\u6587\u4EF6\u751F\u6210\u76EE\u5F55\u521B\u5EFA\u5931\u8D25
+EXPORT_FAIL=\u5BFC\u51FA\u5931\u8D25
+TEMPLATE_FILE_NOT_EXIST=\u6A21\u7248\u6587\u4EF6\u4E0D\u5B58\u5728
+RULE_ID=\u89C4\u5219ID
+CHK_TABLE=\u68C0\u6838\u8868\u540D
+CHK_FIELD=\u68C0\u6838\u5B57\u6BB5\u540D\u79F0
+RULE_NAME=\u89C4\u5219\u540D\u79F0
+FULL_CHK=\u5168\u8868\u6027\u6821\u9A8C\u89C4\u5219\u7C7B\u578B
+RULE_EXPR=\u89C4\u5219\u8868\u8FBE\u5F0F
+EXPR_TYPE=\u8868\u8FBE\u5F0F\u7C7B\u578B
+IS_ENABLE=\u662F\u5426\u542F\u7528
+FORCE_SUB=\u662F\u5426\u80FD\u5F3A\u5236\u63D0\u4EA4
+RULE_DESC=\u89C4\u5219\u53D1\u6587\u63CF\u8FF0
+STRONG_CHK=\u662F\u5426\u5F3A\u6821\u9A8C
+THRESHOLD=\u9608\u503C
+WEIGHT=\u6743\u91CD
+REMARK=\u5907\u6CE8
+ONLY_CMT=\u662F\u5426\u53EA\u5907\u6CE8
+PROPOSER=\u63D0\u51FA\u4EBA
+PROP_TIME=\u63D0\u51FA\u65F6\u95F4
+DEVELOPER=\u5F00\u53D1\u4EBA
+DEV_TIME=\u5F00\u53D1\u65F6\u95F4
+TESTER=\u6D4B\u8BD5\u4EBA
+TEST_TIME=\u6D4B\u8BD5\u65F6\u95F4
+RULE_MAINT=\u89C4\u5219\u7EF4\u62A4
+RULE_IMP_TMPL=\u89C4\u5219\u7EF4\u62A4\u5BFC\u5165\u6A21\u677F
+CODE_MAINT=\u7801\u503C\u7EF4\u62A4
+CODE_TYPE=\u4EE3\u7801\u7C7B\u578B
+CODE_TYPE_NAME=\u4EE3\u7801\u7C7B\u578B\u540D\u79F0
+CODE_ITEM=\u4EE3\u7801\u9879
+CODE_ITEM_NAME=\u4EE3\u7801\u9879\u540D\u79F0
+PARENT_ITEM=\u4E0A\u7EA7\u4EE3\u7801\u9879
+CODE_LEVEL=\u4EE3\u7801\u7EA7\u522B
+ITEM_SEQ=\u4EE3\u7801\u9879\u5E8F\u53F7
+IS_BOTTOM=\u662F\u5426\u6700\u5E95\u5C42\u4EE3\u7801
+RULE_MOD_REC=\u89C4\u5219\u4FEE\u6539\u8BB0\u5F55
+OPER_TYPE=\u64CD\u4F5C\u7C7B\u578B
+REPORT_ID=\u76D1\u7BA1ID
+UPDATE_FIELD=\u4FEE\u6539\u5B57\u6BB5
+OLD_VALUE=\u4FEE\u6539\u524D
+NEW_VALUE=\u4FEE\u6539\u540E
+CODE_IMP_TEMPLATE=\u7801\u503C\u5BFC\u5165\u6A21\u677F
+REPORT_GROUP_CODE_EXISTS=\u586B\u62A5\u7EC4\u4EE3\u7801\u5DF2\u5B58\u5728\uFF0C\u8BF7\u4FEE\u6539\u540E\u518D\u64CD\u4F5C
+CRON_EXPRESSION_INVALID=cron\u8868\u8FBE\u5F0F\u65E0\u6548,\u65E0\u6CD5\u65B0\u589E
+TRIGGER_NAME_USED=\u89E6\u53D1\u5668\u540D\u79F0\u5DF2\u88AB\u4F7F\u7528\uFF0C\u65E0\u6CD5\u65B0\u589E
+CRON_EXPRESSION_INVALID_EDIT=cron\u8868\u8FBE\u5F0F\u65E0\u6548, \u65E0\u6CD5\u7F16\u8F91
+CRON_EXPRESSION_INVALID_MINUTE_UNIT=cron\u8868\u8FBE\u5F0F\u65E0\u6548, \u8BF7\u786E\u4FDD\u6700\u5C0F\u5355\u4F4D\u6309\u5929
+TRIGGER_ALREADY_USED_CANNOT_EDIT=\u89E6\u53D1\u5668\u5DF2\u88AB\u4F7F\u7528\uFF0C\u65E0\u6CD5\u4FEE\u6539
+TRIGGER_NAME_USED_CANNOT_EDIT=\u89E6\u53D1\u5668\u540D\u79F0\u5DF2\u88AB\u4F7F\u7528\uFF0C\u65E0\u6CD5\u4FEE\u6539
+ASSOCIATED_TASK_EXISTS_CANNOT_DISABLE=\u5B58\u5728\u5DF2\u5173\u8054\u4EFB\u52A1\uFF0C\u65E0\u6CD5\u505C\u7528
+TRIGGER_IN_USE_CANNOT_DELETE=\u5B58\u5728\u6B63\u5728\u4F7F\u7528\u7684\u89E6\u53D1\u5668\uFF0C\u65E0\u6CD5\u5220\u9664
+PLEASE_SELECT_TRIGGER=\u8BF7\u9009\u62E9\u89E6\u53D1\u5668\uFF01
+TRIGGER_ALREADY_USED_CANNOT_DELETE=\u89E6\u53D1\u5668\u5DF2\u88AB\u4F7F\u7528\uFF0C\u65E0\u6CD5\u5220\u9664
+FIELD_ENGLISH_NAME_EXISTS=\u5B57\u6BB5\u82F1\u6587\u540D\u5DF2\u5B58\u5728
+ADD_FAILED_SELECT_DATASOURCE=\u65B0\u589E\u5931\u8D25,\u8BF7\u9009\u62E9\u6570\u636E\u6E90
+TASKS_EXIST_PLEASE_UNLINK_BEFORE_DELETING=\u5B58\u5728\u5DF2\u5173\u8054\u7684\u586B\u62A5\u4EFB\u52A1\uFF0C\u8BF7\u53D6\u6D88\u5173\u8054\u540E\u5220\u9664
+TASK_EXISTS_CANNOT_DISABLE=\u5B58\u5728\u5173\u8054\u7684\u542F\u7528\u72B6\u6001\u586B\u62A5\u4EFB\u52A1\uFF0C\u6682\u4E0D\u5141\u8BB8\u505C\u7528
+ONLY_APPLY_TO_AUDITING_TASKS=\u53EA\u80FD\u7533\u8BF7\u89E3\u9501\u5BA1\u6838\u4E2D\u7684\u4EFB\u52A1
+REQUEST_PARAMETER_CANNOT_BE_EMPTY=\u8BF7\u6C42\u53C2\u6570\u4E0D\u80FD\u4E3A\u7A7A
+EXTENSION_FIELD_CANNOT_BE_EMPTY=\u6269\u5C55\u5B57\u6BB5\u4E0D\u80FD\u4E3A\u7A7A
+SUPPLEMENTAL_TABLE_CONFIG_NOT_EXIST=\u8865\u5F55\u8868\u914D\u7F6E\u4E0D\u5B58\u5728,\u8BF7\u786E\u8BA4\u540E\u518D\u64CD\u4F5C
+DATA_SOURCE_INFO_NOT_EXIST=\u5F53\u524D\u8868\u6570\u636E\u6E90\u4FE1\u606F\u4E0D\u5B58\u5728

+ 99 - 0
server/yusp-tagging-core/src/main/resources/messages/yusp_input_msg_en.properties

@@ -0,0 +1,99 @@
+SUCCESS=SUCCESS
+RESTART_TASK_COMPLETION=Running task exists, please wait until completion and restart
+MISSING_OR_EMPTY_PARAMS=Missing or empty request parameters
+MODULE_CODE_REQUIRED=Module code cannot be empty
+CODE_ITEMS_REQUIRED=Code items list cannot be empty
+REPORT_ID_REQUIRED=Report ID cannot be empty
+DELETE_FAILED_EXCEPTION=Deletion failed, exception message:{0}
+TASK_RUNNING_CANNOT_DELETE=Deletion failed, the selected task is still running in the engine queue. Please try again later.
+OPERATION_FAILED=Operation failed
+OPERATION_FAILED_PARAM=Operation failed:{0}
+UNLOCKED_RULES_EXIST=There are unlocked rules, deletion failed
+UNLOCKED_RULES_EXIST_CANNOT_IMPORT=Unlocked rules exist, import failed
+QUEUED_TASK_REQUIRED=Only queued tasks can be selected
+TASK_CONFIG_NOT_EXIST=Current task configuration does not exist
+MANUAL_DISPATCH_NOT_ALLOWED=Current task cannot be manually dispatched
+DEADLINE_CANNOT_BE_PAST=Task deadline cannot be earlier than the current date
+SELECT_TASK_TO_START=Please select the task to start
+NO_SUBTASKS_EXIST=The selected task has no subtasks
+SELECT_TASK_TO_RECOVER=Please select a task that is pending start or in progress to recover
+FORCE_COMPLETE_NOT_ALLOWED=Current status does not allow force completion
+NO_REISSUE_TASK=No reissue task available. You can initiate a task through dispatch
+NO_DISABLED_SUBTASKS=The selected task has no disabled subtasks
+FORCE_UNLOCK_COMPLETED_TASK_ONLY=Only completed tasks can be force-unlocked
+NO_NEW_OR_UNLOCKED_RULES_IN_EXCEL=No new or unlocked rules in the imported Excel file, the import is empty
+REQUESTER_DEVELOPER_TESTER_INFO_REQUIRED=Requester, request time, developer, development time, tester, and testing time cannot be empty
+NO_CHANGES_IN_IMPORTED_RULES=There are no changes in the rules from the imported Excel file, no need to import
+UPLOAD_FILE_CANNOT_BE_EMPTY=The uploaded file cannot be empty. Please fill in the content before uploading
+IMMEDIATE_RUN_TASK_EXCEPTION=An exception occurred while running a task immediately
+USER_NO_ORG_OR_LINE_PERMISSION=The current user has no organization or line permission
+DATA_DICT_REQUIRED=Please configure the data dictionary
+SINGLE_CHECK_FAILED=Single check failed, please check the engine status
+PENDING_TASK_EXISTS=There is an ongoing task in the selected tasks. Please start later
+DISABLED_DATA_OPERATION_ONLY=Only disabled data can be operated
+DICTIONARY_ITEM_REQUIRED=Dictionary item cannot be empty
+DICTIONARY_CODE_EXISTS=Dictionary code {0} already exists
+DICTIONARY_ITEM_DUPLICATE_NOT_ALLOWED=Dictionary item cannot be duplicated
+LOGIN_TIMEOUT=Login timeout
+FILE_GEN_DIR_CREATE_FAIL=Failed to create the file generation directory
+EXPORT_FAIL=Export failed
+TEMPLATE_FILE_NOT_EXIST=Template file does not exist
+RULE_ID=rule id
+CHK_TABLE=check table name
+CHK_FIELD=check field name
+RULE_NAME=rule name
+FULL_CHK=Full Table Check Rule Type
+RULE_EXPR=Rule Expression
+EXPR_TYPE=Expression Type
+IS_ENABLE=Is Enabled
+FORCE_SUB=Can Force Submit
+RULE_DESC=Rule Description
+STRONG_CHK=Is Strong Check
+THRESHOLD=Threshold
+WEIGHT=Weight
+REMARK=Remark
+ONLY_CMT=Is Only Comment
+PROPOSER=Proposer
+PROP_TIME=Proposal Time
+DEVELOPER=Developer
+DEV_TIME=Development Time
+TESTER=Tester
+TEST_TIME=Test Time
+RULE_MAINT=Rule Maintenance
+RULE_IMP_TMPL=Rule Maintenance Import Template
+CODE_MAINT=Code Value Maintenance
+CODE_TYPE=Code Type
+CODE_TYPE_NAME=Code Type Name
+CODE_ITEM=Code Item
+CODE_ITEM_NAME=Code Item Name
+PARENT_ITEM=Parent Code Item
+CODE_LEVEL=Code Level
+ITEM_SEQ=Item Sequence
+IS_BOTTOM=Is Bottom Level
+RULE_MOD_REC=Rule Modification Record
+OPER_TYPE=Operation Type
+REPORT_ID=Report ID
+UPDATE_FIELD=Update Field
+OLD_VALUE=Old Value
+NEW_VALUE=New Value
+CODE_IMP_TEMPLATE=Code Import Template
+REPORT_GROUP_CODE_EXISTS=Report group code already exists, please modify and try again
+CRON_EXPRESSION_INVALID=CRON expression is invalid, cannot add new
+TRIGGER_NAME_USED=Trigger name already used, cannot add new
+CRON_EXPRESSION_INVALID_EDIT=CRON expression is invalid, cannot edit
+CRON_EXPRESSION_INVALID_MINUTE_UNIT=CRON expression is invalid, please ensure the minimum unit is by day
+TRIGGER_ALREADY_USED_CANNOT_EDIT=Trigger is already in use, cannot be modified
+TRIGGER_NAME_USED_CANNOT_EDIT=Trigger name already used, cannot be modified
+ASSOCIATED_TASK_EXISTS_CANNOT_DISABLE=Associated task exists, cannot disable
+TRIGGER_IN_USE_CANNOT_DELETE=There is a trigger in use, cannot delete
+PLEASE_SELECT_TRIGGER=Please select a trigger!
+TRIGGER_ALREADY_USED_CANNOT_DELETE=Trigger is already in use, cannot delete
+FIELD_ENGLISH_NAME_EXISTS=Field English name already exists
+ADD_FAILED_SELECT_DATASOURCE=Add failed, please select data source
+TASKS_EXIST_PLEASE_UNLINK_BEFORE_DELETING=Associated reporting tasks exist, please unlink before deleting
+TASK_EXISTS_CANNOT_DISABLE=Associated enabled reporting tasks exist, temporarily not allowed to disable
+ONLY_APPLY_TO_AUDITING_TASKS=Can only apply to tasks under audit
+REQUEST_PARAMETER_CANNOT_BE_EMPTY=Request parameter cannot be empty
+EXTENSION_FIELD_CANNOT_BE_EMPTY=Extension field cannot be empty
+SUPPLEMENTAL_TABLE_CONFIG_NOT_EXIST=Supplemental table configuration does not exist, please confirm and operate again
+DATA_SOURCE_INFO_NOT_EXIST=Current table data source information does not exist

+ 99 - 0
server/yusp-tagging-core/src/main/resources/messages/yusp_input_msg_zh.properties

@@ -0,0 +1,99 @@
+SUCCESS=\u64CD\u4F5C\u6210\u529F
+RESTART_TASK_COMPLETION=\u5B58\u5728\u6B63\u5728\u8FD0\u884C\u7684\u4EFB\u52A1\uFF0C\u8BF7\u7B49\u5F85\u8FD0\u884C\u7ED3\u675F\u540E\u91CD\u65B0\u542F\u52A8
+MISSING_OR_EMPTY_PARAMS=\u8BF7\u6C42\u53C2\u6570\u7F3A\u5931\u6216\u4E3A\u7A7A
+MODULE_CODE_REQUIRED=\u6A21\u5757\u7F16\u53F7\u4E0D\u80FD\u4E3A\u7A7A
+CODE_ITEMS_REQUIRED=\u7801\u503C\u4EE3\u7801\u9879\u5217\u8868\u4E0D\u80FD\u4E3A\u7A7A
+REPORT_ID_REQUIRED=\u53C2\u6570\u62A5\u8868ID\u4E0D\u5141\u8BB8\u4E3A\u7A7A
+DELETE_FAILED_EXCEPTION=\u5220\u9664\u5931\u8D25,\u5F02\u5E38\u4FE1\u606F\u4E3A:{0}
+TASK_RUNNING_CANNOT_DELETE=\u5220\u9664\u5931\u8D25,\u6240\u9009\u4EFB\u52A1\u4ECD\u5728\u5F15\u64CE\u961F\u5217\u8FD0\u884C\u4E2D,\u8BF7\u7A0D\u540E\u91CD\u8BD5
+OPERATION_FAILED=\u7CFB\u7EDF\u5F02\u5E38
+OPERATION_FAILED_PARAM=\u7CFB\u7EDF\u5F02\u5E38:{0}
+UNLOCKED_RULES_EXIST=\u5B58\u5728\u672A\u89E3\u9501\u7684\u89C4\u5219\uFF0C\u5220\u9664\u5931\u8D25
+UNLOCKED_RULES_EXIST_CANNOT_IMPORT=\u5B58\u5728\u672A\u89E3\u9501\u7684\u89C4\u5219\uFF0C\u65E0\u6CD5\u5BFC\u5165
+QUEUED_TASK_REQUIRED=\u53EA\u80FD\u9009\u62E9\u6392\u961F\u4E2D\u7684\u4EFB\u52A1
+TASK_CONFIG_NOT_EXIST=\u5F53\u524D\u4EFB\u52A1\u914D\u7F6E\u4E0D\u5B58\u5728
+MANUAL_DISPATCH_NOT_ALLOWED=\u5F53\u524D\u4EFB\u52A1\u4E0D\u80FD\u624B\u52A8\u4E0B\u53D1
+DEADLINE_CANNOT_BE_PAST=\u4EFB\u52A1\u622A\u6B62\u65F6\u95F4\u4E0D\u80FD\u5C0F\u4E8E\u5F53\u524D\u65E5\u671F
+SELECT_TASK_TO_START=\u8BF7\u9009\u62E9\u8981\u5F00\u542F\u7684\u4EFB\u52A1
+NO_SUBTASKS_EXIST=\u5F53\u524D\u6240\u9009\u4EFB\u52A1\uFF0C\u4E0D\u5B58\u5728\u5B50\u4EFB\u52A1
+SELECT_TASK_TO_RECOVER=\u8BF7\u9009\u62E9\u5F85\u5F00\u542F\u6216\u586B\u62A5\u4E2D\u7684\u4EFB\u52A1\u8FDB\u884C\u56DE\u6536
+FORCE_COMPLETE_NOT_ALLOWED=\u5F53\u524D\u72B6\u6001\u4E0D\u5141\u8BB8\u5F3A\u5236\u5B8C\u6210
+NO_REISSUE_TASK=\u5F53\u524D\u4E0D\u5B58\u5728\u53EF\u8865\u53D1\u4EFB\u52A1\uFF0C\u60A8\u53EF\u901A\u8FC7\u4E0B\u53D1\u6765\u53D1\u8D77\u4EFB\u52A1
+NO_DISABLED_SUBTASKS=\u5F53\u524D\u6240\u9009\u4EFB\u52A1\uFF0C\u4E0D\u5B58\u5728\u672A\u5F00\u542F\u7684\u5B50\u4EFB\u52A1
+FORCE_UNLOCK_COMPLETED_TASK_ONLY=\u53EA\u80FD\u5F3A\u5236\u89E3\u9501\u5DF2\u5B8C\u6210\u7684\u4EFB\u52A1
+NO_NEW_OR_UNLOCKED_RULES_IN_EXCEL=\u5F53\u524D\u5BFC\u5165\u7684excel\u4E2D\u65E0\u65B0\u589E\u548C\u89E3\u9501\u7684\u89C4\u5219\uFF0C\u5BFC\u5165\u4E3A\u7A7A
+REQUESTER_DEVELOPER_TESTER_INFO_REQUIRED=\u63D0\u51FA\u4EBA\u3001\u63D0\u51FA\u65F6\u95F4\u3001\u5F00\u53D1\u4EBA\u3001\u5F00\u53D1\u65F6\u95F4\u3001\u6D4B\u8BD5\u4EBA\u3001\u6D4B\u8BD5\u65F6\u95F4\u5747\u4E0D\u53EF\u4E3A\u7A7A
+NO_CHANGES_IN_IMPORTED_RULES=\u5F53\u524D\u5BFC\u5165\u7684excel\u4E2D\u7684\u89C4\u5219\u65E0\u53D8\u5316\uFF0C\u65E0\u9700\u5BFC\u5165
+UPLOAD_FILE_CANNOT_BE_EMPTY=\u4E0A\u4F20\u6587\u4EF6\u4E0D\u80FD\u4E3A\u7A7A\uFF0C\u8BF7\u586B\u5199\u540E\u518D\u4E0A\u4F20
+IMMEDIATE_RUN_TASK_EXCEPTION=\u7ACB\u5373\u8FD0\u884C\u4E00\u4E2A\u4EFB\u52A1\u65F6\u5F02\u5E38
+USER_NO_ORG_OR_LINE_PERMISSION=\u5F53\u524D\u7528\u6237\u65E0\u673A\u6784\u6216\u8005\u6761\u7EBF\u7684\u6743\u9650
+DATA_DICT_REQUIRED=\u8BF7\u914D\u7F6E\u6570\u636E\u5B57\u5178
+SINGLE_CHECK_FAILED=\u5355\u6761\u68C0\u67E5\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u5F15\u64CE\u72B6\u6001
+PENDING_TASK_EXISTS=\u6240\u9009\u4EFB\u52A1\u5B58\u5728\u8FDB\u884C\u4E2D\u7684\u4EFB\u52A1\uFF0C\u8BF7\u7A0D\u540E\u542F\u52A8
+DISABLED_DATA_OPERATION_ONLY=\u53EA\u80FD\u64CD\u4F5C\u505C\u7528\u7684\u6570\u636E
+DICTIONARY_ITEM_REQUIRED=\u5B57\u5178\u9879\u4E0D\u80FD\u4E3A\u7A7A
+DICTIONARY_CODE_EXISTS=\u5B57\u5178\u4EE3\u7801:{0}\u5DF2\u5B58\u5728
+DICTIONARY_ITEM_DUPLICATE_NOT_ALLOWED=\u5B57\u5178\u9879\u4E0D\u80FD\u91CD\u590D
+LOGIN_TIMEOUT=\u767B\u5F55\u8D85\u65F6
+FILE_GEN_DIR_CREATE_FAIL=\u6587\u4EF6\u751F\u6210\u76EE\u5F55\u521B\u5EFA\u5931\u8D25
+EXPORT_FAIL=\u5BFC\u51FA\u5931\u8D25
+TEMPLATE_FILE_NOT_EXIST=\u6A21\u7248\u6587\u4EF6\u4E0D\u5B58\u5728
+RULE_ID=\u89C4\u5219ID
+CHK_TABLE=\u68C0\u6838\u8868\u540D
+CHK_FIELD=\u68C0\u6838\u5B57\u6BB5\u540D\u79F0
+RULE_NAME=\u89C4\u5219\u540D\u79F0
+FULL_CHK=\u5168\u8868\u6027\u6821\u9A8C\u89C4\u5219\u7C7B\u578B
+RULE_EXPR=\u89C4\u5219\u8868\u8FBE\u5F0F
+EXPR_TYPE=\u8868\u8FBE\u5F0F\u7C7B\u578B
+IS_ENABLE=\u662F\u5426\u542F\u7528
+FORCE_SUB=\u662F\u5426\u80FD\u5F3A\u5236\u63D0\u4EA4
+RULE_DESC=\u89C4\u5219\u53D1\u6587\u63CF\u8FF0
+STRONG_CHK=\u662F\u5426\u5F3A\u6821\u9A8C
+THRESHOLD=\u9608\u503C
+WEIGHT=\u6743\u91CD
+REMARK=\u5907\u6CE8
+ONLY_CMT=\u662F\u5426\u53EA\u5907\u6CE8
+PROPOSER=\u63D0\u51FA\u4EBA
+PROP_TIME=\u63D0\u51FA\u65F6\u95F4
+DEVELOPER=\u5F00\u53D1\u4EBA
+DEV_TIME=\u5F00\u53D1\u65F6\u95F4
+TESTER=\u6D4B\u8BD5\u4EBA
+TEST_TIME=\u6D4B\u8BD5\u65F6\u95F4
+RULE_MAINT=\u89C4\u5219\u7EF4\u62A4
+RULE_IMP_TMPL=\u89C4\u5219\u7EF4\u62A4\u5BFC\u5165\u6A21\u677F
+CODE_MAINT=\u7801\u503C\u7EF4\u62A4
+CODE_TYPE=\u4EE3\u7801\u7C7B\u578B
+CODE_TYPE_NAME=\u4EE3\u7801\u7C7B\u578B\u540D\u79F0
+CODE_ITEM=\u4EE3\u7801\u9879
+CODE_ITEM_NAME=\u4EE3\u7801\u9879\u540D\u79F0
+PARENT_ITEM=\u4E0A\u7EA7\u4EE3\u7801\u9879
+CODE_LEVEL=\u4EE3\u7801\u7EA7\u522B
+ITEM_SEQ=\u4EE3\u7801\u9879\u5E8F\u53F7
+IS_BOTTOM=\u662F\u5426\u6700\u5E95\u5C42\u4EE3\u7801
+RULE_MOD_REC=\u89C4\u5219\u4FEE\u6539\u8BB0\u5F55
+OPER_TYPE=\u64CD\u4F5C\u7C7B\u578B
+REPORT_ID=\u76D1\u7BA1ID
+UPDATE_FIELD=\u4FEE\u6539\u5B57\u6BB5
+OLD_VALUE=\u4FEE\u6539\u524D
+NEW_VALUE=\u4FEE\u6539\u540E
+CODE_IMP_TEMPLATE=\u7801\u503C\u5BFC\u5165\u6A21\u677F
+REPORT_GROUP_CODE_EXISTS=\u586B\u62A5\u7EC4\u4EE3\u7801\u5DF2\u5B58\u5728\uFF0C\u8BF7\u4FEE\u6539\u540E\u518D\u64CD\u4F5C
+CRON_EXPRESSION_INVALID=cron\u8868\u8FBE\u5F0F\u65E0\u6548,\u65E0\u6CD5\u65B0\u589E
+TRIGGER_NAME_USED=\u89E6\u53D1\u5668\u540D\u79F0\u5DF2\u88AB\u4F7F\u7528\uFF0C\u65E0\u6CD5\u65B0\u589E
+CRON_EXPRESSION_INVALID_EDIT=cron\u8868\u8FBE\u5F0F\u65E0\u6548, \u65E0\u6CD5\u7F16\u8F91
+CRON_EXPRESSION_INVALID_MINUTE_UNIT=cron\u8868\u8FBE\u5F0F\u65E0\u6548, \u8BF7\u786E\u4FDD\u6700\u5C0F\u5355\u4F4D\u6309\u5929
+TRIGGER_ALREADY_USED_CANNOT_EDIT=\u89E6\u53D1\u5668\u5DF2\u88AB\u4F7F\u7528\uFF0C\u65E0\u6CD5\u4FEE\u6539
+TRIGGER_NAME_USED_CANNOT_EDIT=\u89E6\u53D1\u5668\u540D\u79F0\u5DF2\u88AB\u4F7F\u7528\uFF0C\u65E0\u6CD5\u4FEE\u6539
+ASSOCIATED_TASK_EXISTS_CANNOT_DISABLE=\u5B58\u5728\u5DF2\u5173\u8054\u4EFB\u52A1\uFF0C\u65E0\u6CD5\u505C\u7528
+TRIGGER_IN_USE_CANNOT_DELETE=\u5B58\u5728\u6B63\u5728\u4F7F\u7528\u7684\u89E6\u53D1\u5668\uFF0C\u65E0\u6CD5\u5220\u9664
+PLEASE_SELECT_TRIGGER=\u8BF7\u9009\u62E9\u89E6\u53D1\u5668\uFF01
+TRIGGER_ALREADY_USED_CANNOT_DELETE=\u89E6\u53D1\u5668\u5DF2\u88AB\u4F7F\u7528\uFF0C\u65E0\u6CD5\u5220\u9664
+FIELD_ENGLISH_NAME_EXISTS=\u5B57\u6BB5\u82F1\u6587\u540D\u5DF2\u5B58\u5728
+ADD_FAILED_SELECT_DATASOURCE=\u65B0\u589E\u5931\u8D25,\u8BF7\u9009\u62E9\u6570\u636E\u6E90
+TASKS_EXIST_PLEASE_UNLINK_BEFORE_DELETING=\u5B58\u5728\u5DF2\u5173\u8054\u7684\u586B\u62A5\u4EFB\u52A1\uFF0C\u8BF7\u53D6\u6D88\u5173\u8054\u540E\u5220\u9664
+TASK_EXISTS_CANNOT_DISABLE=\u5B58\u5728\u5173\u8054\u7684\u542F\u7528\u72B6\u6001\u586B\u62A5\u4EFB\u52A1\uFF0C\u6682\u4E0D\u5141\u8BB8\u505C\u7528
+ONLY_APPLY_TO_AUDITING_TASKS=\u53EA\u80FD\u7533\u8BF7\u89E3\u9501\u5BA1\u6838\u4E2D\u7684\u4EFB\u52A1
+REQUEST_PARAMETER_CANNOT_BE_EMPTY=\u8BF7\u6C42\u53C2\u6570\u4E0D\u80FD\u4E3A\u7A7A
+EXTENSION_FIELD_CANNOT_BE_EMPTY=\u6269\u5C55\u5B57\u6BB5\u4E0D\u80FD\u4E3A\u7A7A
+SUPPLEMENTAL_TABLE_CONFIG_NOT_EXIST=\u8865\u5F55\u8868\u914D\u7F6E\u4E0D\u5B58\u5728,\u8BF7\u786E\u8BA4\u540E\u518D\u64CD\u4F5C
+DATA_SOURCE_INFO_NOT_EXIST=\u5F53\u524D\u8868\u6570\u636E\u6E90\u4FE1\u606F\u4E0D\u5B58\u5728

BIN
server/yusp-tagging-core/src/main/resources/template/detail_col_template.xlsx


+ 233 - 0
server/yusp-tagging-starter/pom.xml

@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>cn.com.yusys.yusp</groupId>
+    <parent>
+        <artifactId>server</artifactId>
+        <groupId>cn.com.yusys.yusp</groupId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>yusp-tagging-starter</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!-- 依赖 core 模块 -->
+        <dependency>
+            <groupId>cn.com.yusys.yusp</groupId>
+            <artifactId>yusp-tagging-core</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+            <version>2.1.2.RELEASE</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
+            <version>2.1.2.RELEASE</version>
+        </dependency>
+
+
+
+        <dependency>
+            <groupId>org.yaml</groupId>
+            <artifactId>snakeyaml</artifactId>
+            <version>1.26</version>
+        </dependency>
+        <dependency>
+            <groupId>com.squareup.okio</groupId>
+            <artifactId>okio</artifactId>
+            <version>3.4.0</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>kotlin-stdlib</artifactId>
+                    <groupId>org.jetbrains.kotlin</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-text</artifactId>
+            <version>1.10.0</version>
+        </dependency>
+        <!--漏洞升级-->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-webflux</artifactId>
+            <version>5.2.20.RELEASE</version>
+        </dependency>
+        <!--漏洞升级-->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-messaging</artifactId>
+            <version>5.2.22.RELEASE</version>
+        </dependency>
+        <!--漏洞升级-->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-webmvc</artifactId>
+            <version>5.2.20.RELEASE</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>spring-beans</artifactId>
+                    <groupId>org.springframework</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>spring-expression</artifactId>
+                    <groupId>org.springframework</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>spring-context</artifactId>
+                    <groupId>org.springframework</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <!--漏洞升级-->
+        <!--        <dependency>
+                    <groupId>org.springframework.security</groupId>
+                    <artifactId>spring-security-crypto</artifactId>
+                    <version>6.1.5</version>
+                </dependency>-->
+        <!--漏洞升级-->
+        <dependency>
+            <groupId>io.netty</groupId>
+            <artifactId>netty-codec-http</artifactId>
+            <version>4.1.108.Final</version>
+        </dependency>
+        <dependency>
+            <groupId>org.jsoup</groupId>
+            <artifactId>jsoup</artifactId>
+            <version>1.15.3</version>
+        </dependency>
+        <!--漏洞升级-->
+        <!--        <dependency>
+                    <groupId>org.springframework</groupId>
+                    <artifactId>spring-core</artifactId>
+                    <version>5.2.24.RELEASE</version>
+                </dependency>-->
+        <!--        <dependency>
+                    <groupId>org.springframework</groupId>
+                    <artifactId>spring-beans</artifactId>
+                    <version>5.2.24.RELEASE</version>
+                </dependency>-->
+        <dependency>
+            <groupId>org.apache.zookeeper</groupId>
+            <artifactId>zookeeper</artifactId>
+            <version>3.8.4</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>logback-classic</artifactId>
+                    <groupId>ch.qos.logback</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>logback-core</artifactId>
+                    <groupId>ch.qos.logback</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tomcat.embed</groupId>
+            <artifactId>tomcat-embed-core</artifactId>
+            <version>9.0.86</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.santuario</groupId>
+            <artifactId>xmlsec</artifactId>
+            <version>2.2.6</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>woodstox-core</artifactId>
+                    <groupId>com.fasterxml.woodstox</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <!--漏洞升级-->
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-cbor</artifactId>
+            <version>2.17.0-rc1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.jettison</groupId>
+            <artifactId>jettison</artifactId>
+            <version>1.5.4</version>
+        </dependency>
+        <!--漏洞升级-->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+            <version>5.2.25.RELEASE</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>spring-beans</artifactId>
+                    <groupId>org.springframework</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>spring-expression</artifactId>
+                    <groupId>org.springframework</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-expression</artifactId>
+            <version>5.2.25.RELEASE</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.mybatis</groupId>
+            <artifactId>mybatis-spring</artifactId>
+            <version>2.1.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-tx</artifactId>
+            <version>5.3.33</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <finalName>yusp-app-detail</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <executable>true</executable>
+<!--                    <fork>true</fork>-->
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <profiles>
+        <profile>
+            <id>apollo</id>
+            <activation>
+                <activeByDefault>false</activeByDefault>
+            </activation>
+            <properties>
+                <profile.active>apollo</profile.active>
+            </properties>
+            <dependencies>
+            </dependencies>
+        </profile>
+    </profiles>
+
+</project>

+ 15 - 0
server/yusp-tagging-starter/src/main/java/cn/com/yusys/yusp/detail/App.java

@@ -0,0 +1,15 @@
+package cn.com.yusys.yusp.detail;
+
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+
+@EnableDiscoveryClient
+@SpringBootApplication(scanBasePackages = {"cn.com.yusys.yusp"})
+
+public class App {
+    public static void main(String[] args) {
+        SpringApplication.run(App.class, args);
+    }
+}

+ 2 - 0
server/yusp-tagging-starter/src/main/resources/application.yml

@@ -0,0 +1,2 @@
+server:
+  port: 8080

+ 19 - 0
server/yusp-tagging-starter/src/main/resources/bootstrap.yml

@@ -0,0 +1,19 @@
+spring:
+  application:
+    name: demo
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 127.0.0.1:38848
+        namespace: backend-base-version
+      config:
+        server-addr: 127.0.0.1:38848
+        namespace: backend-base-version
+        file-extension: yaml
+        group: DEFAULT_GROUP
+        extension-configs[0]:
+          data-id: demo.yaml
+          refresh: true
+        extension-configs[1]:
+          data-id: application-license.yml
+          refresh: true #配置扩展属性动态刷新

+ 8 - 0
server/yusp-tagging-starter/src/main/scripts/deploy.sh

@@ -0,0 +1,8 @@
+#!/bin/bash
+SERVICE_NAME=frs-yusp-bfd-starter
+SERVICE_VERSION=2.1.2-SNAPSHOT
+unzip -o $HOME/app/SERVICE_NAME-SERVICE_VERSION.zip -d $HOME/app/$SERVICE_NAME
+cd $HOME/app/$SERVICE_NAME/scripts
+./shutdown.sh
+./startup.sh
+

+ 17 - 0
server/yusp-tagging-starter/src/main/scripts/shutdown.sh

@@ -0,0 +1,17 @@
+#!/bin/bash
+SERVICE_NAME=frs-yusp-bfd-starter
+export APP_NAME=$SERVICE_NAME
+if [[ -z "$JAVA_HOME" && -d /usr/java/latest/ ]]; then
+    export JAVA_HOME=/usr/java/latest/
+fi
+
+cd  dirname $0 /..
+
+if [[ ! -f $SERVICE_NAME".war" && -d current ]]; then
+    cd current
+fi
+
+if [[ -f $SERVICE_NAME".war" ]]; then
+  chmod a+x $SERVICE_NAME".war"
+  ./$SERVICE_NAME".war" stop
+fi

+ 1 - 0
server/yusp-tagging-starter/src/main/scripts/startup.cmd

@@ -0,0 +1 @@
+java -jar -Dfile.encoding=UTF-8 ../frs-yusp-bfd-starter.jar

+ 105 - 0
server/yusp-tagging-starter/src/main/scripts/startup.sh

@@ -0,0 +1,105 @@
+#!/bin/bash
+SERVICE_NAME=frs-yusp-bfd-starter
+## Adjust log dir if necessary
+LOG_DIR=../logs
+## Adjust server port if necessary
+SERVER_PORT=8080
+## set app name
+export APP_NAME=$SERVICE_NAME
+
+## You must Adjust for apollo !!!!!!!!!!!!!!!!!
+#是否启用apollo
+APOLLO_ENABLED=true
+APOLLO_APPID=yusp-gateway
+APOLLO_ENV=DEV
+APOLLO_DEVMETA=http://localhost:9001
+NAMESPACES=application.yml
+
+## Adjust memory settings if necessary
+#export JAVA_OPTS="-Xms6144m -Xmx6144m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:NewSize=4096m -XX:MaxNewSize=4096m -XX:SurvivorRatio=8"
+#export JAVA_OPTS="-Xms6144m -Xmx6144m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:NewSize=4096m -XX:MaxNewSize=4096m -XX:SurvivorRatio=8"
+
+## Only uncomment the following when you are using server jvm
+#export JAVA_OPTS="$JAVA_OPTS -server -XX:-ReduceInitialCardMarks"
+
+export JAVA_OPTS="$JAVA_OPTS -XX:+UseParNewGC -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -XX:+UseCMSInitiatingOccupancyOnly -XX:+ScavengeBeforeFullGC -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSPermGenSweepingEnabled -XX:CMSInitiatingPermOccupancyFraction=70 -XX:+ExplicitGCInvokesConcurrent -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom"
+export JAVA_OPTS="$JAVA_OPTS -Dserver.port=$SERVER_PORT -Dlogging.file=$LOG_DIR/$SERVICE_NAME.log -Xloggc:$LOG_DIR/heap_trace.txt -XX:HeapDumpPath=$LOG_DIR/HeapDumpOnOutOfMemoryError/"
+if [ $APOLLO_ENABLED ]; then
+    export JAVA_OPTS="$JAVA_OPTS -Dapp.id=$APOLLO_APPID -Denv=$APOLLO_ENV -Dapollo.meta=$APOLLO_DEVMETA -Dapollo.bootstrap.enabled=true -Dapollo.bootstrap.namespaces=$NAMESPACES"
+else
+    export JAVA_OPTS="$JAVA_OPTS -Dapollo.bootstrap.enabled=false"
+fi
+
+PATH_TO_JAR=$SERVICE_NAME".jar"
+SERVER_URL="http://localhost:$SERVER_PORT"
+
+function checkPidAlive {
+    return 0;
+}
+
+cd  dirname $0 /..
+
+for i in  ls *$SERVICE_NAME-*.jar 2>/dev/null
+do
+    if [[ ! $i == *"-sources.jar" ]]
+    then
+        PATH_TO_JAR=$i
+        break
+    fi
+done
+
+if [[ ! -f PATH_TO_JAR && -d current ]]; then
+    cd current
+    for i in  ls *$SERVICE_NAME-*.jar 2>/dev/null
+    do
+        if [[ ! $i == *"-sources.jar" ]]
+        then
+            PATH_TO_JAR=$i
+            break
+        fi
+    done
+fi
+
+if [[ -f $SERVICE_NAME".jar" ]]; then
+  rm -rf $SERVICE_NAME".jar"
+fi
+
+printf "$(date) ==== Starting ==== \n"
+
+ln $PATH_TO_JAR $SERVICE_NAME".jar"
+chmod a+x $SERVICE_NAME".jar"
+./$SERVICE_NAME".jar" start
+
+rc=$?;
+
+if [[ $rc != 0 ]];
+then
+    echo "$(date) Failed to start $SERVICE_NAME.jar, return code: $rc"
+    exit $rc;
+fi
+
+declare -i counter=0
+declare -i max_counter=48 # 48*5=240s
+declare -i total_time=0
+
+printf "Waiting for server startup"
+until [[ (( counter -ge max_counter )) || "$(curl -X GET --silent --connect-timeout 1 --max-time 2 --head $SERVER_URL | grep "HTTP/1.1 200")" != "" ]];
+do
+    printf "."
+    counter+=1
+    sleep 5
+
+    checkPidAlive
+done
+
+total_time=counter*5
+
+if [[ (( counter -ge max_counter )) ]];
+then
+    printf "\n$(date) Server failed to start in $total_time seconds!\n"
+    exit 1;
+fi
+
+printf "\n$(date) Server started in $total_time seconds!\n"
+
+exit 0;