diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/libraries/gradle_wrapper.xml b/.idea/libraries/gradle_wrapper.xml
new file mode 100644
index 0000000..0796d76
--- /dev/null
+++ b/.idea/libraries/gradle_wrapper.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..1c91fd0
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..bdf5d04
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/scict2.iml b/.idea/scict2.iml
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ b/.idea/scict2.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/base/shkd-base-common/build.gradle b/base/shkd-base-common/build.gradle
new file mode 100644
index 0000000..d245d1a
--- /dev/null
+++ b/base/shkd-base-common/build.gradle
@@ -0,0 +1,32 @@
+/*
+ * This is a kingdee cosmic template project that is automatically generated by the Kingdee cosmic development assistant plugin.
+ * If there are any issues during the use process, you can provide feedback to the kingdee developer community website.
+ * Website: https://developer.kingdee.com/developer?productLineId=29
+ * Author: liebin.zheng
+ * Generate Date: 2024-10-25 13:35:51
+ */
+
+apply from: '../../config.gradle'
+
+def bos = ext.path.bos
+def trd = ext.path.trd
+def cus = ext.path.cus
+def biz = ext.path.biz
+
+dependencies {
+ api fileTree(dir: bos, include: '*.jar')
+
+ api fileTree(trd) { include '*.jar' exclude 'qing-arthas-*.jar' }
+ //如果出现本地启动出现log4j相关依赖包版本冲突的问题,则可以参考以下方式手工解决
+ //api fileTree(trd) {
+ // include '*.jar'
+ // exclude 'log4j-api-*.jar','logback-*.jar','slf4j-*.jar','qing-arthas-*.jar'
+ //}
+ //api 'cn.hutool:hutool-all:5.8.20'
+ //api 'ch.qos.logback:logback-classic:1.2.12'
+ //api 'org.slf4j:log4j-over-slf4j:1.7.36'
+ //api 'org.apache.logging.log4j:log4j-to-slf4j:2.20.0'
+
+ runtimeOnly fileTree(dir: biz, include: '*.jar')
+ runtimeOnly fileTree(dir: cus, include: '*.jar')
+}
\ No newline at end of file
diff --git a/base/shkd-base-helper/build.gradle b/base/shkd-base-helper/build.gradle
new file mode 100644
index 0000000..7234f4b
--- /dev/null
+++ b/base/shkd-base-helper/build.gradle
@@ -0,0 +1,12 @@
+/*
+ * This is a kingdee cosmic template project that is automatically generated by the Kingdee cosmic development assistant plugin.
+ * If there are any issues during the use process, you can provide feedback to the kingdee developer community website.
+ * Website: https://developer.kingdee.com/developer?productLineId=29
+ * Author: liebin.zheng
+ * Generate Date: 2024-10-25 13:35:51
+ */
+
+dependencies {
+ api project(':shkd-base-common')
+}
+
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..ca5b714
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,151 @@
+/**
+ * This is a kingdee cosmic template project that is automatically generated by the Kingdee cosmic development assistant plugin.
+ * If there are any issues during the use process, you can provide feedback to the kingdee developer community website.
+ * Website: https://developer.kingdee.com/developer?productLineId=29
+ * Author: liebin.zheng
+ * Generate Date: 2024-10-25 13:35:51
+ */
+
+plugins {
+ id 'java'
+ //https://docs.gradle.org/current/userguide/java_library_plugin.html#java_library_plugin
+ id 'java-library'
+ //id 'maven-publish'
+ //https://docs.gradle.org/current/userguide/idea_plugin.html
+ //id 'idea'
+ //https://docs.gradle.org/current/userguide/eclipse_plugin.html
+ //id 'eclipse'
+ //id "org.sonarqube" version "3.5.0.2730"
+}
+
+apply from: 'config.gradle'
+
+def bos = ext.path.bos
+def trd = ext.path.trd
+def cus = ext.path.cus
+def biz = ext.path.biz
+def outputdir = ext.path.outputdir
+
+//所有工程共用的配置
+allprojects {
+
+ apply plugin: 'java'
+ apply plugin: 'maven-publish'
+ apply plugin: 'java-library'
+ apply plugin: 'eclipse'
+ apply plugin: 'idea'
+
+ repositories{
+ mavenLocal()
+ maven{ url'https://maven.aliyun.com/repository/public/'}
+ maven{ url'https://maven.aliyun.com/repository/gradle-plugin'}
+ mavenCentral()
+ //maven { url 'https://repo.gradle.org/gradle/libs-releases' }
+ //gradlePluginPortal()
+ }
+
+ group = System.getProperty('groupId')
+ version = System.getProperty('version')
+
+ def jdk_version = System.getProperty('jdk.version')
+ sourceCompatibility = jdk_version
+ targetCompatibility = jdk_version
+
+ tasks.withType(JavaCompile) {
+ options.encoding = "UTF-8"
+ }
+
+ dependencies {
+
+ //implementation 'cn.hutool:hutool-all:5.8.20'
+ //implementation 'ch.qos.logback:logback-classic:1.2.12'
+ //implementation 'org.slf4j:log4j-over-slf4j:1.7.36'
+ //implementation 'org.apache.logging.log4j:log4j-to-slf4j:2.20.0'
+ //testImplementation platform('org.junit:junit-bom:5.9.1')
+ //testImplementation 'org.junit.jupiter:junit-jupiter'
+
+ }
+
+ test {
+ useJUnitPlatform()
+ }
+
+ java {
+ withSourcesJar()
+ //withJavadocJar()
+ }
+
+ Date now = new Date()
+ String date = now.format('yyyy-MM-dd HH:mm:ss')
+ String buildNum = now.format('yyyyMMddHHmmssSSS')
+
+ String gitCommitShortHash = ''
+ String gitBranch = ''
+ try{
+ gitCommitShortHash = 'git log -1 --pretty=%H'.execute([], project.rootDir).text.trim()
+ gitBranch = 'git branch --show-current'.execute([], project.rootDir).text.trim()
+ } catch(Exception e){
+ println "warning: the commandline tools of git was not installed!"
+ }
+
+ jar {
+ manifest {
+ attributes 'Group-Name': project.group
+ attributes 'Project-Name': project.name
+ attributes 'Bundle-Version': project.version
+ attributes 'Build-Num': buildNum
+ attributes 'Build-Date': date
+ attributes 'Build-Jdk': System.getProperty('java.version')
+ attributes 'Built-By': 'Kingdee Cosmic Developer Tools'
+ attributes 'Build-Tool': 'Gradle ' + project.gradle.gradleVersion
+ attributes 'Git-Commit-Hash': gitCommitShortHash
+ attributes 'Git-Branch': gitBranch
+ attributes 'Cloud-Name': ''
+ attributes 'App-Name': ''
+ attributes 'Jar-Id': ''
+ attributes 'Build-Image': ''
+ }
+ }
+
+}
+
+//所有子工程共用的配置
+subprojects {
+
+ dependencies {
+
+ }
+
+ //生成本工程jar包并拷贝到outputdir目录
+ task buildJar(type: Copy, dependsOn: build){
+ group 'build'
+ description '生成本工程jar包并拷贝到outputdir目录'
+ from 'build/libs'
+ into outputdir
+ exclude '*sources.jar','*javadoc.jar','*cosmic-debug*.jar'
+ processResources{
+ from('src/main/java'){
+ include '**/*.properties'
+ }
+ }
+ }
+
+ //生成本工程jar包并拷贝到拷贝到cus目录
+ task deployJar(type: Copy, dependsOn: build){
+ group 'build'
+ description '生成本工程jar包并拷贝到拷贝到cus目录'
+ from 'build/libs'
+ into cus
+ exclude '*sources.jar','*javadoc.jar','*cosmic-debug*.jar'
+ processResources{
+ from('src/main/java'){
+ include '**/*.properties'
+ }
+ }
+ }
+
+ test.ignoreFailures true
+
+
+}
+
diff --git a/config.gradle b/config.gradle
new file mode 100644
index 0000000..1a4957f
--- /dev/null
+++ b/config.gradle
@@ -0,0 +1,44 @@
+/**
+ * This is a kingdee cosmic template project that is automatically generated by the Kingdee cosmic development assistant plugin.
+ * If there are any issues during the use process, you can provide feedback to the kingdee developer community website.
+ * Website: https://developer.kingdee.com/developer?productLineId=29
+ * Author: liebin.zheng
+ * Generate Date: 2024-10-25 13:35:51
+ */
+def cosmic_libs_path = System.getProperty('cosmic_libs_path')
+def cosmic_home = null
+
+if(cosmic_libs_path == null){
+ //println "NO 'cosmic_libs_path' property was setted in gradle.properties. "
+ //println "Try to find the 'cosmic_home' property in gradle.properties."
+ cosmic_home = System.getProperty('cosmic_home')
+}
+
+if(cosmic_home == null){
+ //println "NO 'cosmic_home' property was setted in gradle.properties. "
+ //println "Try to find the 'COSMIC_HOME' property in System environment."
+ cosmic_home = System.getenv('COSMIC_HOME')
+}
+
+if(cosmic_home != null){
+ cosmic_libs_path = "${cosmic_home}/mservice-cosmic/lib"
+}
+
+if(cosmic_libs_path == null){
+ throw new RuntimeException("Neither 'COSMIC_LIBS_PATH' was setted in System environment, nor 'cosmic_libs_path' property was setted in gradle.properties.")
+}
+
+
+println "The 'cosmic_libs_path' is: '${cosmic_libs_path}'."
+
+ext {
+
+ path = [
+ trd : "${cosmic_libs_path}/trd",
+ bos : "${cosmic_libs_path}/bos",
+ biz : "${cosmic_libs_path}/biz",
+ cus : "${cosmic_libs_path}/cus",
+ outputdir : "${cosmic_libs_path}/outputdir"
+ ]
+
+}
\ No newline at end of file
diff --git a/cosmic.properties b/cosmic.properties
new file mode 100644
index 0000000..1bdd42b
--- /dev/null
+++ b/cosmic.properties
@@ -0,0 +1,2 @@
+#Fri Oct 25 13:35:51 CST 2024
+MCServerURL=http://10.1.7.85:8090/appstore/dev_env
\ No newline at end of file
diff --git a/docs/images/code1.png b/docs/images/code1.png
new file mode 100644
index 0000000..cf0923a
Binary files /dev/null and b/docs/images/code1.png differ
diff --git a/docs/images/cosmic-studio-qrcode.png b/docs/images/cosmic-studio-qrcode.png
new file mode 100644
index 0000000..cc9d383
Binary files /dev/null and b/docs/images/cosmic-studio-qrcode.png differ
diff --git a/docs/images/eclipse-gradle.png b/docs/images/eclipse-gradle.png
new file mode 100644
index 0000000..d7005be
Binary files /dev/null and b/docs/images/eclipse-gradle.png differ
diff --git a/docs/images/idea-gradle.png b/docs/images/idea-gradle.png
new file mode 100644
index 0000000..b02be5d
Binary files /dev/null and b/docs/images/idea-gradle.png differ
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..c22218f
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,25 @@
+### ----------------------------
+### This is a kingdee cosmic template project that is automatically generated by the Kingdee cosmic development assistant plugin.
+### If there are any issues during the use process, you can provide feedback to the kingdee developer community website.
+### Website: https://developer.kingdee.com/developer?productLineId=29
+### Author: liebin.zheng
+### Generate Date: 2024-10-25 13:35:51
+### ----------------------------
+systemProp.kddt_version=2.1.6
+systemProp.template_type=app
+systemProp.groupId=shkd.cosmic
+systemProp.artifactId=shkd-cosmic
+systemProp.version=1.0.0
+systemProp.jdk.version=1.8
+systemProp.developer_flag=shkd
+systemProp.project_dir=E:/scict2
+systemProp.cosmic_home=E:/scict_sever2
+#systemProp.cosmic_libs_path=E:/scict_sever2/mservice-cosmic/lib
+#systemProp.cosmic_static_path=E:/scict_sever2/static-file-service
+#systemProp.res_url=http://10.1.7.85:8090/appstore/dev_env
+#systemProp.zk_url=10.1.7.85:2181
+#systemProp.mc_url=http://10.1.7.85:8090/mc
+org.gradle.parallel=true
+org.gradle.daemon=true
+org.gradle.caching=true
+org.gradle.jvmargs=-Xms256m -Xmx1024m -XX:MaxMetaspaceSize=128m
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..cc58b84
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..6681bd7
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-7.6.3-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
new file mode 100644
index 0000000..c10d582
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,240 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# 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.
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+APP_NAME="Gradle"
+APP_BASE_NAME=${0##*/}
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx1024m" "-Xms256m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+# Collect all arguments for the java command;
+# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+# shell script including quotes and variable substitutions, so put them in
+# double quotes to make sure that they get re-expanded; and
+# * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..5448cec
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,91 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx1024m" "-Xms256m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/readme.md b/readme.md
new file mode 100644
index 0000000..9c59c78
--- /dev/null
+++ b/readme.md
@@ -0,0 +1,150 @@
+# 金蝶云苍穹Gradle模板使用说明
+
+## 1.启动服务
+
+### 1) DebugApplication中设置好环境必要的参数
+
+- setClusterNumber: 集群编码
+- setTenantNumber: 租户编码
+- setMcServerUrl: 设置MC服务地址
+- setCosmicWepPort: 设置苍穹服务端口
+- setConfigUrl: 设置zk服务地址及用户密码
+- setFsServerUrl: 设置文件服务地址
+- setImageServerUrl: 设置图像服务地址
+
+
+例:
+
+```java
+cosmic.setClusterNumber("cosmic");
+cosmic.setTenantNumber("sample");
+cosmic.setMcServerUrl("http://127.0.0.1:8090");
+cosmic.setCosmicWepPort(8080)
+cosmic.setConfigUrl("127.0.0.1:2182?user=zk&password=xxxxxx");
+cosmic.setFsServerUrl("127.0.0.1", 8100);
+cosmic.setImageServerUrl("127.0.0.1", 8100);
+```
+
+
+### 2) 启动服务
+
+```java
+kd.cosmic.DebugApplication
+```
+首次运行,请检查项目默认的JDK,确保为1.8版本,否则会提示启动异常。
+
+
+### 3) 登录
+启动完毕后打开:http://127.0.0.1:8080/ierp
+
+注意:此处的端口为setCosmicWepPort所配置的具体端口数值
+
+
+## 2.更新环境
+菜单操作路径:苍穹开发助手-->更新环境
+
+将从MC服务器上更新最新包:cosmic.zip、webapp.zip,解压到统一的苍穹资源目录下,可通过系统环境变量"COSMIC_HOME"或项目中gradle.properties的"systemProp.cosmic_home"配置项指定。
+
+默认的web静态资源目录为:System.getenv("COSMIC_HOME") + "/static-file-service",也可通过以下代码修改:
+
+```java
+cosmic.setWebResPath("xxx/static-file-service")
+```
+
+注意:更新版本时请先停止在正在跑或调试的工程,避免文件占用无法覆盖。
+
+## 3.工程打包与部署
+
+工程打包有多种方式,可通过Idea或Eclipse中Gradle命令界面build菜单下的"buildJar"任务,也可以打开CMD终端使用"gradle buildJar"命令方式实现。
+
+```cmd
+cd your_project_dir
+gradle buildJar
+```
+
+Jar包部署有多种方式,可通过Idea或Eclipse中Gradle命令界面build菜单下的"deployJar"任务,也可以打开CMD终端使用"gradle deployJar"命令方式实现。
+
+```cmd
+cd your_project_dir
+gradle deployJar
+```
+
+推荐开发工具自带的Gradle构建菜单进行工程的构建、清理及部署等任务。
+
+Idea Gradle工具菜单如下图:
+
+ ![idea-gradle](docs/images/idea-gradle.png)
+
+
+Eclipse Gradle工具菜单如下图:
+
+ ![idea-gradle](docs/images/eclipse-gradle.png)
+
+
+
+## 6.金蝶代码扫描
+右键项目工程目录,在右侧菜单中,点击“金蝶代码分析/金蝶代码扫描”功能,即可实现对该工程代码的静态代码扫描。
+
+ ![code1](docs/images/code1.png)
+
+
+## 5.插件选项
+菜单操作路径:File->Settings->苍穹开发助手
+
+
+## 6.搜索工具窗
+菜单操作路径:View->Tool Windows->苍穹开发助手
+
+若当前为苍穹工程(工程根目录下有cosmic.properties文件),苍穹开发助手自行显示,停靠在右上角。
+
+提供文档检索功能。
+
+
+## 7.菜单-登录开发者门户
+未登录:苍穹开发助手(工具窗)-社区文章-可搜索“开发者社区”文档
+登录后:苍穹开发助手(工具窗)-社区文章-可搜索“开发者社区+开发者门户”文档
+
+## 8.常见问题
+8.1. 忘记ZK账号密码,可通过从MC服务查看的环境变量configUrl,或可通过SQL在MC数据库实例中查询,参考如下SQL
+
+```sql
+select t.furl, t.fusername, t.fpassword from t_mc_zookeeper t ;
+```
+
+## 9.相关文档
+
+ 1、苍穹开发者工具下载与安装
+ https://developer.kingdee.com/article/418778103486608384
+
+ 2、金蝶云·苍穹开发环境搭建
+ https://developer.kingdee.com/article/418816210550117376
+
+ 3、金蝶云·苍穹开发者助手插件安装
+ https://developer.kingdee.com/article/476393455359492608
+
+ 4、金蝶云·苍穹代码规范扫描介绍
+ https://developer.kingdee.com/article/476783839013202176
+
+ 5、新版苍穹开发助手如何导入本地已有的项目或工程模块
+ https://developer.kingdee.com/article/517721581637036032
+
+ 6、苍穹开发助手Debug工程启动报zookeeper认证错误-NoAuth
+ https://developer.kingdee.com/article/517758258006900992
+
+ 7、苍穹debug工程启动或编译报GC错误: Out fo Memory或GC overhead limit
+ https://developer.kingdee.com/article/519826723685411072
+
+ 8、启动苍穹本地debug服务的控制台日志卡在CuratorFrameworkImpl这一行
+ https://developer.kingdee.com/article/519891614198842112
+
+ 9、IDEA启动命令行过长解决办法
+ https://vip.kingdee.com/article/357806944599232512
+
+
+## 🤝 联系我们
+
+请使用云之家扫描以下二维码。
+
+### 苍穹开发者工具交流反馈群
+ ![qrcode](docs/images/cosmic-studio-qrcode.png)
+
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..e095417
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,26 @@
+/**
+ * This is a kingdee cosmic template project that is automatically generated by the Kingdee cosmic development assistant plugin.
+ * If there are any issues during the use process, you can provide feedback to the kingdee developer community website.
+ * Website: https://developer.kingdee.com/developer?productLineId=29
+ * Author: liebin.zheng
+ * Generate Date: 2024-10-25 13:35:51
+ */
+rootProject.name = System.getProperty('artifactId')
+
+include(
+ 'shkd-cosmic-debug',
+ ':shkd-base-common',
+ ':shkd-base-helper',
+
+ ':shkd-sys-sys',
+)
+
+// -------------- 引入苍穹调试工程模块 --------------
+//project(':shkd-cosmic-debug').projectDir = new File('shkd-cosmic-debug')
+
+// -------------- 引入公共基础模块 --------------
+project(':shkd-base-common').projectDir = new File('base/shkd-base-common')
+project(':shkd-base-helper').projectDir = new File('base/shkd-base-helper')
+
+// -------------- 引入sys云-sys应用模块 --------------
+project(':shkd-sys-sys').projectDir = new File('sys/shkd-sys-sys')
diff --git a/shkd-cosmic-debug/build.gradle b/shkd-cosmic-debug/build.gradle
new file mode 100644
index 0000000..54f4148
--- /dev/null
+++ b/shkd-cosmic-debug/build.gradle
@@ -0,0 +1,18 @@
+/*
+ * This is a kingdee cosmic template project that is automatically generated by the Kingdee cosmic development assistant plugin.
+ * If there are any issues during the use process, you can provide feedback to the kingdee developer community website.
+ * Website: https://developer.kingdee.com/developer?productLineId=29
+ * Author: liebin.zheng
+ * Generate Date: 2024-10-25 13:35:51
+ */
+
+dependencies {
+
+ // 公共基础包
+ implementation project(':shkd-base-common')
+ implementation project(':shkd-base-helper')
+
+ // 引入sys云 - sys应用模块
+ implementation project(':shkd-sys-sys')
+
+}
diff --git a/shkd-cosmic-debug/shkd-cosmic-debug.iml b/shkd-cosmic-debug/shkd-cosmic-debug.iml
new file mode 100644
index 0000000..f76df2b
--- /dev/null
+++ b/shkd-cosmic-debug/shkd-cosmic-debug.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/shkd-cosmic-debug/src/main/java/kd/cosmic/debug/tools/CosmicLauncher.java b/shkd-cosmic-debug/src/main/java/kd/cosmic/debug/tools/CosmicLauncher.java
new file mode 100644
index 0000000..54e6588
--- /dev/null
+++ b/shkd-cosmic-debug/src/main/java/kd/cosmic/debug/tools/CosmicLauncher.java
@@ -0,0 +1,463 @@
+/**
+ * This is a kingdee cosmic template project that is automatically generated by the Kingdee cosmic development assistant plugin.
+ * If there are any issues during the use process, you can provide feedback to the kingdee developer community website.
+ * Website: https://developer.kingdee.com/developer?productLineId=29
+ * Author: liebin.zheng
+ * Generate Date: 2024-10-25 13:35:51
+ */
+package kd.cosmic.debug.tools;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.ServerSocket;
+import java.net.UnknownHostException;
+import java.util.Properties;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import kd.bos.config.client.util.ConfigUtils;
+import kd.bos.service.bootstrap.Booter;
+
+/**
+ * cosmic服务启动器,含默认配置,如需更改请在DebugApplication中设置。
+ * 注:本工具类由开发助手自动生成,请不用直接修改本工具类。
+ */
+public final class CosmicLauncher {
+
+ /**
+ * 苍穹安装目录的环境变量名称(即苍穹依赖包和静态资源目录的上级目录)
+ */
+ private static final String COSMIC_HOME = "COSMIC_HOME";
+
+ /**
+ * Gradle变量-Cosmic Home
+ */
+ private static final String GRADLE_PROPERTIES_COSMIC_HOME = "systemProp.cosmic_home";
+
+ /**
+ * 苍穹Gradle模板默认变量 - 默认的苍穹资源目录
+ */
+ private static final String DEFAULT_COSMIT_HOME_PATH = System.getProperty("user.home").replaceAll("\\\\", "/") + "/cosmic/home";
+
+ private static final String PROJECT_HOME = "E:/scict2";
+
+ private static final String LOCAL_IP = "127.0.0.1";
+
+ public static String localHostName;
+
+ private boolean setConfigUrl = false;
+
+ private int cosmicPort = 8881;
+
+ private String cosmicUrl = "http://127.0.0.1:" + cosmicPort + "/ierp";
+
+ /**
+ * 是否优先使用MC服务端的配置替代本地调试模板工程的部分默认配置
+ */
+ private boolean useMcServiceConfigFirst = false;
+
+ public CosmicLauncher() {
+ setDefault();
+ }
+
+ /**
+ * @param useMcServiceConfigFirst 是否优先使用MC服务端的配置替代本地调试模板工程的部分默认配置
+ */
+ public CosmicLauncher(boolean useMcServiceConfigFirst) {
+ this.useMcServiceConfigFirst = useMcServiceConfigFirst;
+ setDefault();
+ }
+
+ public void setDefault() {
+
+ set("configAppName", "mservice,web");
+ set("webmserviceinone", "true");
+ set("file.encoding", "utf-8");
+ set("MONITOR_HTTP_PORT", "9998");
+ set("JMX_HTTP_PORT", "9091");
+ set("appSplit", "false");
+ set("tenant.code.type", "config");
+
+ localHostName = getLocalHostName();
+ setClusterNumber("cosmic");
+ setTenantNumber("ierp");
+ setAppName("kdcosmic-" + localHostName + "-" + cosmicPort);
+
+ setXdbEnable(false);
+ setSqlOut(true, true);
+
+ setCosmicWepPort(cosmicPort);
+ setWebResPath(getCosmicHome() + "/static-file-service");
+
+ //是否优先使用MC服务端的配置替代本地调试模板工程的部分默认配置
+ if (!useMcServiceConfigFirst) {
+ //当本地开发且连接轻量级环境时,可使用以下默认配置
+ setConfigUrl("127.0.0.1:2181");
+ setMcServerUrl("http://127.0.0.1:8090");
+ setFsServerUrl("127.0.0.1", 8100);
+ setImageServerUrl("127.0.0.1", 8100);
+
+// setEnableLightWeightDeploy(true);
+ setDubboHostConfig(LOCAL_IP, 28888, 30880);
+// set("login.type", "STANDALONE");
+ setMqConsumerRegister(false, null);
+ } else {
+ //当需要连接项目开发环境(即非轻量级环境)时,应以MC服务器上面的配置优先
+// setEnableLightWeightDeploy(false);
+ setMqConsumerRegister(true, localHostName);
+ }
+
+ setStartWithQing(false);
+
+ //是否以轻量级环境启动苍穹服务
+ setEnableLightWeightDeploy(true);
+
+ //本地日志配置
+ setLogConfig(false);
+
+ //Dubbo服务注册配置
+ setDubboConfig(false, true, true);
+
+ }
+
+ public void start() {
+// LOG.info("Cosmic Service starting! Please check url: {}", getCosmicUrl());
+ Booter.main(null);
+ }
+
+ public void set(String key, String value) {
+ System.setProperty(key, value);
+ }
+
+ public String get(String key) {
+ return System.getProperty(key);
+ }
+
+ /**
+ * 设置苍穹服务器IP地址(包括MC、ZK、文件及图片服务)
+ * 不推荐使用该方法,项目开发时应该分别配置这几个服务地址,或者优先使用MC服务器上的配置。
+ */
+ @Deprecated
+ public void setServerIp(String ip) {
+ setMcServerUrl("http://" + ip + ":8090");
+ if (!setConfigUrl) {
+ setConfigUrl(ip + ":2181");
+ }
+ setFsServerUrl(ip, 8100);
+ setImageServerUrl(ip, 8100);
+ }
+
+ /**
+ * 设置MC服务地址
+ *
+ * @param mcServerUrl
+ */
+ public void setMcServerUrl(String mcServerUrl) {
+ set("mc.server.url", mcServerUrl);
+ }
+
+ /**
+ * @param configUrl 配置服务地址
+ */
+ public void setConfigUrl(String configUrl) {
+ set(ConfigUtils.CONFIG_URL_KEY, configUrl);
+ setConfigUrl = true;
+ }
+
+ /**
+ * 配置服务地址
+ *
+ * @param connectString zookeeper链接URL,如 127.0.0.1:2181
+ * @param user 用户
+ * @param password 密码
+ */
+ public void setConfigUrl(String connectString, String user, String password) {
+ if (user != null && password != null) {
+ setConfigUrl(connectString + "?user=" + user + "&password=" + password);
+ } else {
+ setConfigUrl(connectString);
+ }
+ }
+
+ /**
+ * @param clusterNumber 集群编码
+ */
+ public void setClusterNumber(String clusterNumber) {
+ set(ConfigUtils.CLUSTER_NAME_KEY, clusterNumber);
+ }
+
+
+ /**
+ * @param appName 本节点服务名称
+ */
+ public void setAppName(String appName) {
+ setAppName(appName, true);
+ }
+
+ public void setAppName(String appName, boolean alsoSetQueueTag) {
+ set(ConfigUtils.APP_NAME_KEY, appName);
+ if (alsoSetQueueTag) {
+ setQueueTag(appName);
+ }
+ }
+
+ public void setStartWithQing(boolean b) {
+ set("bos.app.special.deployalone.ids", b ? " " : "qing");
+ }
+
+ /**
+ * @param tenantNumber 租户编码
+ */
+ public void setTenantNumber(String tenantNumber) {
+ set("domain.tenantCode", tenantNumber);
+ }
+
+ /**
+ * @param enable 是否开启水平分表服务
+ */
+ public void setXdbEnable(boolean enable) {
+ set("xdb.enable", String.valueOf(enable));
+ }
+
+ /**
+ * @param tag 队列标记
+ */
+ public void setQueueTag(String tag) {
+ set("mq.debug.queue.tag", tag);
+ }
+
+ /**
+ * @param path web静态资源路径
+ */
+ public void setWebResPath(String path) {
+ set("JETTY_WEBRES_PATH", path);
+ }
+
+ /**
+ * 控制台输出SQL开关
+ *
+ * @param outSql 是否输出SQL
+ * @param withParameter 是否输出参数
+ */
+ public void setSqlOut(boolean outSql, boolean withParameter) {
+ set("db.sql.out", String.valueOf(outSql));
+ set("db.sql.out.withParameter", String.valueOf(withParameter));
+ }
+
+ /**
+ * 设置苍穹服务端口
+ * @param port
+ */
+ public void setCosmicWepPort(int port) {
+ this.cosmicPort = port;
+ this.cosmicUrl = "http://127.0.0.1:" + cosmicPort + "/ierp";
+ set("JETTY_WEB_PORT", String.valueOf(cosmicPort));
+ set("domain.contextUrl", cosmicUrl);
+ }
+
+ /**
+ * 设置是否注册为MQ消费者
+ * @param registerOnMq
+ * @param debbugTopic
+ */
+ public void setMqConsumerRegister(boolean registerOnMq, String debbugTopic) {
+ set("mq.consumer.register", String.valueOf(registerOnMq));
+ if(StringUtils.isNotBlank(debbugTopic)) {
+ set("mq.debug.queue.tag", debbugTopic);
+ }
+ }
+
+ /**
+ * 设置文件服务地址
+ * @param ip
+ * @param port
+ */
+ public void setFsServerUrl(String ip, int port) {
+ set("fileserver", "http://" + ip + ":" + port + "/fileserver/");
+ set("attachmentServer.url", "http://" + ip + ":" + port + "/fileserver/");
+ set("attachmentServer.inner.url", "http://" + ip + ":" + port + "/fileserver/");
+ }
+
+ /**
+ * 设置图片服务地址
+ * @param ip
+ * @param port
+ */
+ public void setImageServerUrl(String ip, int port) {
+ set("imageServer.url", "http://" + ip + ":" + port + "/fileserver/");
+ set("imageServer.inner.url", "http://" + ip + ":" + port + "/fileserver/");
+ }
+
+ /**
+ * 获取苍穹服务URL
+ */
+ public String getCosmicUrl() {
+ return cosmicUrl;
+ }
+
+ /**
+ * 设置webapp配置所在的目录
+ */
+ public void setWebAppPath(String path) {
+ set("JETTY_WEBAPP_PATH", path);
+ }
+
+ /**
+ * 是否以轻量级环境启动苍穹服务
+ */
+ public void setEnableLightWeightDeploy(boolean enable) {
+ set("lightweightdeploy", String.valueOf(enable));
+ set("lightweightdeploy.services", "");
+ }
+
+ /**
+ * Redis配置
+ */
+ public void setRedisConfig(String redisUrl) {
+ set("redis.serversForCache", redisUrl);
+ set("redis.serversForSession", redisUrl);
+ set("algo.storage.redis.url", redisUrl);
+ set("redismodelcache.enablelua", String.valueOf(true));
+ }
+
+ /**
+ * MQ配置
+ */
+ public void setMqHostConfig(String mqHost, String mqPort, String mqUser, String mqPassword, String mqVhost) {
+ String line = System.lineSeparator();
+ StringBuffer builder = new StringBuffer();
+ builder.append("type=rabbitmq").append(line).append("host=").append(mqHost).append(line).append("port=")
+ .append(mqPort).append(line).append("user=").append(mqUser).append(line).append("password=")
+ .append(mqPassword).append(line).append("vhost=").append(mqVhost);
+ set("mq.server", builder.toString());
+ }
+
+ /**
+ * 是否启用监控中心日志配置(是否将日志通过kafka上传到日志中心)
+ * 注:如需要启用,请先确保elk、kafka等服务已可用
+ */
+ public void setLogConfig(boolean useMonitorLog) {
+// String logConfigXmlContent = null;
+ String path = null;
+ if(useMonitorLog) {
+ //日志通过kafka上传到日志中心
+ path = "logback-kafka.xml";
+// logConfigXmlContent = FileUtil.readUtf8String("classpath:logback-kafka.xml");
+ } else {
+ //本地日志配置
+ path = "logback.xml";
+// logConfigXmlContent = FileUtil.readUtf8String("classpath:logback.xml");
+ }
+ String logConfigXmlContent;
+ try {
+ logConfigXmlContent = IOUtils.toString(getClass().getClassLoader().getResourceAsStream(path), "utf-8");
+// logConfigXmlContent = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource(path).toURI())), "UTF-8");
+ set("log.config", logConfigXmlContent);
+ set("dubbo.application.logger", "slf4j");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Dubbo服务配置
+ *
+ * @param registerProvider 是否向此注册中心注册服务,如果设为false,将只订阅,不注册
+ * @param registerComsumer 是否向此注册中心订阅服务,如果设为false,将只注册,不订阅
+ * @param lookupLocal 是否使用本地服务查找
+ */
+ public void setDubboConfig(boolean registerProvider, boolean registerComsumer, boolean lookupLocal) {
+// set("dubbo.registry.group", group);
+ set("dubbo.registry.register", String.valueOf(registerProvider));
+ set("dubbo.registry.subscribe", String.valueOf(registerComsumer));
+ //dubbo官方资料上没有支持lookupLocal配置,可能是平台扩展的功能,也可能是无效的配置
+ set("dubbo.service.lookup.local", String.valueOf(lookupLocal));
+// set("dubbo.registry.protocol", "zookeeper");
+// set("dubbo.registry.address", "");
+ }
+
+ /**
+ * Dubbo网络配置
+ * @param ip 默认127.0.0.1
+ * @param port 默认28888
+ * @param qingPort 默认30880
+ */
+ public void setDubboHostConfig(String ip, int port, int qingPort) {
+ port = getAvailablePort(port);
+ qingPort = getAvailablePort(qingPort);
+ set("dubbo.protocol.port", String.valueOf(port));
+ set("dubbo.consumer.url", "dubbo://" + ip + ":" + port);
+ set("dubbo.consumer.url.qing", "dubbo://" + ip + ":" + qingPort);
+ }
+
+ public int getAvailablePort(int port) {
+ try (ServerSocket serverSocket = new ServerSocket(port)) {
+ return port;
+ } catch (IOException e) {
+ return getAvailablePort(port+1);
+ }
+ }
+
+// /**
+// * 设置苍穹服务的中间件类型
+// * @param serverType
+// */
+// public void setCosmicServerType(CosmicServerType serverType) {
+// if(serverType == CosmicServerType.springboot) {
+// set("mservice.booter.type", serverType.name());
+// } else {
+// set("webserver.type", serverType.name());
+// }
+// }
+//
+// enum CosmicServerType{
+// jetty,tomcat,aas,springboot;
+// }
+
+ private static String getLocalHostName() {
+ InetAddress localhost = null;
+ try {
+ localhost = InetAddress.getLocalHost();
+ } catch (UnknownHostException e) {
+ return "UnknownHost";
+ }
+ return localhost.getHostName();
+ }
+
+ public static String getCosmicHome(){
+ return getCosmicHome(PROJECT_HOME);
+ }
+
+ public static String getCosmicHome(String projectPath){
+ String cosmicHome = getCosmicGradleProp(projectPath, GRADLE_PROPERTIES_COSMIC_HOME);
+ if(StringUtils.isBlank(cosmicHome)) {
+ cosmicHome = System.getenv(COSMIC_HOME);
+ }
+ if(StringUtils.isBlank(cosmicHome)) {
+ cosmicHome = DEFAULT_COSMIT_HOME_PATH;
+ }
+ return cosmicHome;
+ }
+
+ private static String getCosmicGradleProp(String projectPath, String key) {
+ String gradleConfigPath = projectPath + "/gradle.properties";
+ Properties prop = new Properties();
+ try {
+ File configFile = new File(gradleConfigPath);
+ if(configFile.exists()) {
+ FileReader fr = new FileReader(configFile);
+ prop.load(fr);
+ fr.close();
+ return prop.getProperty(key);
+ } else {
+ return null;
+ }
+ } catch (IOException e) {
+// e.printStackTrace();
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/shkd-cosmic-debug/src/main/java/shkd/cosmic/debug/DebugApplication.java b/shkd-cosmic-debug/src/main/java/shkd/cosmic/debug/DebugApplication.java
new file mode 100644
index 0000000..5cdad15
--- /dev/null
+++ b/shkd-cosmic-debug/src/main/java/shkd/cosmic/debug/DebugApplication.java
@@ -0,0 +1,46 @@
+/**
+ * This is a kingdee cosmic template project that is automatically generated by the Kingdee cosmic development assistant plugin.
+ * If there are any issues during the use process, you can provide feedback to the kingdee developer community website.
+ * Website: https://developer.kingdee.com/developer?productLineId=29
+ * Author: liebin.zheng
+ * Generate Date: 2024-10-25 13:35:51
+ */
+package shkd.cosmic.debug;
+
+import kd.cosmic.debug.tools.CosmicLauncher;
+
+/**
+ * 启动本地应用程序(微服务节点)
+ */
+public class DebugApplication {
+
+
+
+ public static void main(String[] args) {
+
+// Thread.currentThread().setContextClassLoader(new KDSecurityClassLoader(Thread.currentThread().getContextClassLoader()));
+
+ CosmicLauncher cosmic = new CosmicLauncher(false);
+
+ cosmic.setClusterNumber("cosmic");
+ cosmic.setTenantNumber("ierp");
+
+ cosmic.setConfigUrl("10.1.7.85:2181?user=zookeeper&password=Cosmic@3292");
+// cosmic.setConfigUrl("10.1.7.85:2181");
+
+// cosmic.setMcServerUrl("http://127.0.0.1:8090");
+ cosmic.setMcServerUrl("http://10.1.7.85:8090/mc");
+
+ cosmic.setWebResPath("E:/scict_sever2/static-file-service");
+
+// cosmic.setFsServerUrl("127.0.0.1", 8100);
+// cosmic.setImageServerUrl("127.0.0.1", 8100);
+
+ //自定义本地苍穹调试服务的端口
+ cosmic.setCosmicWepPort(8881);
+// cosmic.setDubboConfig(false, true, true);
+ cosmic.start();
+
+
+ }
+}
\ No newline at end of file
diff --git a/shkd-cosmic-debug/src/main/resources/logback-kafka.xml b/shkd-cosmic-debug/src/main/resources/logback-kafka.xml
new file mode 100644
index 0000000..637135e
--- /dev/null
+++ b/shkd-cosmic-debug/src/main/resources/logback-kafka.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${LOG_PATTERN}
+
+
+
+
+ {{clusterName}}-log
+ {{log.kafka.ip_port}}
+ none
+ false
+ org.apache.kafka.common.serialization.StringSerializer
+ org.apache.kafka.common.serialization.StringSerializer
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/shkd-cosmic-debug/src/main/resources/logback.xml b/shkd-cosmic-debug/src/main/resources/logback.xml
new file mode 100644
index 0000000..9d2e931
--- /dev/null
+++ b/shkd-cosmic-debug/src/main/resources/logback.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${LOG_PATTERN}
+
+
+
+
+
+ ${LOG_PATTERN}
+
+ ${LOG_DIR}/cosmic_out.log
+
+ false
+ ${LOG_DIR}/cosmic_out_%d{yyyyMMdd}_%i.log
+ 10MB
+ 7
+ 0
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sys/shkd-sys-sys/build.gradle b/sys/shkd-sys-sys/build.gradle
new file mode 100644
index 0000000..8f470ce
--- /dev/null
+++ b/sys/shkd-sys-sys/build.gradle
@@ -0,0 +1,14 @@
+/*
+ * This is a kingdee cosmic template project that is automatically generated by the Kingdee cosmic development assistant plugin.
+ * If there are any issues during the use process, you can provide feedback to the kingdee developer community website.
+ * Website: https://developer.kingdee.com/developer?productLineId=29
+ * Author: liebin.zheng
+ * Generate Date: 2024-10-25 13:35:51
+ */
+
+dependencies {
+ api project(':shkd-base-common')
+ api project(':shkd-base-helper')
+}
+
+
diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/business/test.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/business/test.java
new file mode 100644
index 0000000..9290473
--- /dev/null
+++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/business/test.java
@@ -0,0 +1,12 @@
+package shkd.sys.sys.business;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class test {
+
+ public static void main(String[] args) {
+// List list = new ArrayList<>();
+// list.contains();
+ }
+}
diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/common/AppflgConstant.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/common/AppflgConstant.java
new file mode 100644
index 0000000..1d45dfa
--- /dev/null
+++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/common/AppflgConstant.java
@@ -0,0 +1,22 @@
+/**
+ * This is a kingdee cosmic template project that is automatically generated by the Kingdee cosmic development assistant plugin.
+ * If there are any issues during the use process, you can provide feedback to the kingdee developer community website.
+ * Website: https://developer.kingdee.com/developer?productLineId=29
+ * Author: liebin.zheng
+ * Generate Date: 2024-10-25 13:35:51
+ */
+package shkd.sys.sys.common;
+
+/**
+ * sys云sys应用-通用常量类
+ * 代码中不能存在硬编码敏感信息,如账号、密码、http外链、ftp外链、邮箱等。
+ * 标识或缓存的常量,需以"KEY_"、"FID_"、"ENTRY_"或"SUBENTRY_"作为变量的前缀。
+ *
+ * @author shkd
+ * @date 2024-10-25 13:35:51
+ */
+public class AppflgConstant {
+
+ public static final String KEY_APP_NAME = "sys-sys";
+
+}
diff --git a/sys/sys.iml b/sys/sys.iml
new file mode 100644
index 0000000..3fe6e6c
--- /dev/null
+++ b/sys/sys.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file