Explorar el Código

【项目开发】

1.增加ProductHunt数据获取示例
2.增加AI翻译示例
3.优化代码
ChenYL hace 11 meses
padre
commit
d06e433331

+ 12 - 0
.idea/eclipseCodeFormatter.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="EclipseCodeFormatterProjectSettings">
+    <option name="projectSpecificProfile">
+      <ProjectSpecificProfile>
+        <option name="formatter" value="ECLIPSE" />
+        <option name="pathToConfigFileJava" value="$PROJECT_DIR$/doc/eclipse-codestyle.xml" />
+        <option name="selectedJavaProfile" value="P3C-CodeStyle" />
+      </ProjectSpecificProfile>
+    </option>
+  </component>
+</project>

+ 29 - 0
README.md

@@ -0,0 +1,29 @@
+# 数易得
+
+
+
+启动所需参数
+
+```shell
+-Dspring.profiles.active=dev -Djasypt.encryptor.password=XXXXX
+```
+
+
+
+启动所需参数,带网络代理
+
+```shell
+-Dspring.profiles.active=dev -Djasypt.encryptor.password=XXXX -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=10809 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=10809
+```
+
+
+
+
+
+## 参考
+
+* [Product Hunt API参考文档](https://api.producthunt.com/v2/docs)
+* [GraphQL 入门看这篇就够了](https://www.freecodecamp.org/chinese/news/a-detailed-guide-to-graphql/)
+* [Spring AI Prompt 提示模板:创建提示的实战指南](https://www.panziye.com/back/14793.html)
+* [Spring 项目接入 DeepSeek,分享两种超简单的方式!](https://zhuanlan.zhihu.com/p/23328349583)
+

+ 603 - 0
doc/eclipse-codestyle.xml

@@ -0,0 +1,603 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<profiles version="12">
+    <profile kind="CodeFormatterProfile" name="P3C-CodeStyle" version="13">
+        <!--可变参数的... Idea没有对应的配置项,强制insert-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
+        <!--枚举值之间 Idea没有对应的配置项,强制insert-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
+
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=Java:SPACE_BEFORE_COMMA-->
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=Java:SPACE_BEFORE_COMMA
+        由于IDEA只有一个SPACE_BEFORE_COMMA选项,所以统一设置 insert_space_before_comma 为 do not insert
+        -->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments"
+                 value="do not insert"/>
+
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations"
+                 value="do not insert"/>
+        <!--insert_space_before_comma end-->
+
+        <!--org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=Java:SPACE_AFTER_COMMA_IN_TYPE_ARGUMENTS-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
+        <!--IDEA只有一个配置项SPACE_AFTER_COMMA,insert_space_after_comma*统一设置成insert-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters"
+                 value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations"
+                 value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments"
+                 value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference"
+                 value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations"
+                 value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments"
+                 value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws"
+                 value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters"
+                 value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws"
+                 value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments"
+                 value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
+        <!--insert_space_after_comma end-->
+
+
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=Java:SPACE_BEFORE_COLON-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
+
+        <!--org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=Java:SPACE_AFTER_COLON-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
+
+        <!--IDEA不支持配置,默认do not insert-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
+        <!--这个在Eclipse也没有找到配置的地方-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="do not insert"/>
+
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_semicolon=Java:SPACE_BEFORE_SEMICOLON
+        程序导入的时候强制将SPACE_BEFORE_SEMICOLON设置为false
+        -->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
+
+        <!--SPACE_AFTER_SEMICOLON=true-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
+
+        <!--IDEA不支持配置,do not insert-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant"
+                 value="do not insert"/>
+        <setting
+                id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration"
+                value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration"
+                 value="do not insert"/>
+
+        <!--IDEA不支持,使用默认-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
+
+        <!--org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=Java:<Programmatic>-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
+
+        <!--IDEA不支持配置,使用如下值,两者对应-->
+        <setting
+                id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference"
+                value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters"
+                 value="do not insert"/>
+
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters"
+                 value="insert"/>
+        <setting
+                id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference"
+                value="do not insert"/>
+
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments"
+                 value="do not insert"/>
+        <setting
+                id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference"
+                value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters"
+                 value="do not insert"/>
+
+        <!--Java:SPACE_BEFORE_OPENING_ANGLE_BRACKET_IN_TYPE_PARAMETER-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters"
+                 value="do not insert"/>
+        <!--org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=Java:SPACE_AFTER_CLOSING_ANGLE_BRACKET_IN_TYPE_ARGUMENT-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments"
+                 value="do not insert"/>
+
+        <!--org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=Java:<Programmatic>-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
+
+        <!--IDEA使用了对应的配置:Java:SPACE_WITHIN_ARRAY_INITIALIZER_BRACES,但感觉不太好,IDEA默认不插入,Eclipse也使用不插入-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer"
+                 value="do not insert"/>
+
+        <!--use default insert-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return"
+                 value="insert"/>
+
+        <!--use default do not insert -->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
+
+
+        <!--use default insert-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration"
+                 value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration"
+                 value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration"
+                 value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration"
+                 value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw"
+                 value="insert"/>
+
+
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=Java:SPACE_BEFORE_SWITCH_LBRACE-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=Java:SPACE_BEFORE_CLASS_LBRACE-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration"
+                 value="insert"/>
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=Java:<Programmatic>-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=Java:SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer"
+                 value="insert"/>
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=Java:SPACE_BEFORE_METHOD_LBRACE-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration"
+                 value="insert"/>
+        <!--org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=Java:SPACE_AFTER_QUEST-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=Java:SPACE_BEFORE_QUEST-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=Java:SPACE_BEFORE_ANOTATION_PARAMETER_LIST-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation"
+                 value="do not insert"/>
+
+        <!--use default do not insert-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
+        <setting
+                id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration"
+                value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression"
+                 value="do not insert"/>
+
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference"
+                 value="do not insert"/>
+
+
+        <!--下面两个对应IDEA中的一个配置Java:SPACE_AROUND_ASSIGNMENT_OPERATORS,使用insert-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
+
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=Java:SPACE_BEFORE_CATCH_PARENTHESES-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=Java:SPACE_BEFORE_METHOD_CALL_PARENTHESES-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation"
+                 value="do not insert"/>
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=Java:SPACE_BEFORE_TRY_PARENTHESES-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
+
+        <!--下面两个对应IDEA中的一个配置Java:SPACE_AROUND_UNARY_OPERATOR,使用do not insert-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
+
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=Java:SPACE_BEFORE_IF_PARENTHESES-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
+
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=Java:SPACE_BEFORE_WHILE_PARENTHESES-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
+
+        <!--org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=Java:SPACE_AFTER_TYPE_CAST-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="do not insert"/>
+
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=Java:SPACE_BEFORE_METHOD_PARENTHESES-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration"
+                 value="do not insert"/>
+
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=Java:SPACE_BEFORE_FOR_PARENTHESES-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=Java:SPACE_BEFORE_SYNCHRONIZED_PARENTHESES-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
+
+        <!--org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=Java:SPACE_BEFORE_SWITCH_PARENTHESES-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
+
+        <!--下面两个对应IDEA中的一个配置Java:SPACE_AROUND_LAMBDA_ARROW,使用insert-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/>
+        <!--SPACE_WITHIN_EMPTY_ARRAY_INITIALIZER_BRACES-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer"
+                 value="do not insert"/>
+
+        <!--Idea -> Wrapping And Braces -> Simple classes in one line -->
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="do not insert"/>
+        <!--Idea -> Wrapping And Braces -> Simple method in one line -->
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="do not insert"/>
+        <!--因为Idea不支持配置,所以设置为 Idea默认值-->
+
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant"
+                 value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" value="do not insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="insert"/>
+        <!--Idea可以通过Wrap Always实现 TODO-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
+        <!--Idea -> Wrapping And Braces -> Simple block in one line -> do not select -->
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
+
+        <!--Idea -> Wrapping And Braces -> try statement -> catch.... (Java:CATCH_ON_NEW_LINE)-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement"
+                 value="do not insert"/>
+        <!--org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=<Programmatic>-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
+        <!--org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=Java:ARRAY_INITIALIZER_RBRACE_ON_NEXT_LINE-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer"
+                 value="do not insert"/>
+        <!--#org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=Java:ARRAY_INITIALIZER_LBRACE_ON_NEXT_LINE-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer"
+                 value="do not insert"/>
+        <!--org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=Java:ELSE_ON_NEW_LINE-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
+        <!--org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=Java:WHILE_ON_NEW_LINE-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement"
+                 value="do not insert"/>
+        <!--org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=Java:FINALLY_ON_NEW_LINE-->
+        <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement"
+                 value="do not insert"/>
+
+        <!--comment start-->
+        <setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="120"/>
+        <!--ENABLE_JAVADOC_FORMATTING-->
+        <setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
+        <!--org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=<Programmatic>-->
+        <setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
+        <!--IDEA无对应设置,所以关闭对block comment的格式化 -->
+        <setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="false"/>
+        <setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
+        <setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
+
+        <!--org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=Java:KEEP_FIRST_COLUMN_COMMENT-->
+        <setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
+        <!--org.eclipse.jdt.core.formatter.use_on_off_tags=FORMATTER_TAGS_ENABLED-->
+        <setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="true"/>
+        <!--org.eclipse.jdt.core.formatter.disabling_tag=FORMATTER_OFF_TAG-->
+        <setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
+        <!--org.eclipse.jdt.core.formatter.enabling_tag=FORMATTER_ON_TAG-->
+        <setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
+
+        <!--下面的没有IDEA对应项,在代码里面对IDEA中使用默认值即可,LINE_COMMENT_AT_FIRST_COLUMN BLOCK_COMMENT_AT_FIRST_COLUMN设置为false-->
+        <setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
+        <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
+        <setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
+
+        <setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments"
+                 value="false"/>
+
+
+        <setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
+        <setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
+        <setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="true"/>
+        <setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
+
+        <setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
+        <setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
+
+        <setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>
+        <!--和IDEA保持一致,注释换行-->
+        <setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
+        <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
+
+
+        <!--comment end-->
+
+        <!--org.eclipse.jdt.core.formatter.blank_lines_after_imports=Java:BLANK_LINES_AFTER_IMPORTS-->
+        <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
+        <!--org.eclipse.jdt.core.formatter.blank_lines_before_imports=Java:BLANK_LINES_BEFORE_IMPORTS-->
+        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
+        <!--org.eclipse.jdt.core.formatter.blank_lines_after_package=Java:BLANK_LINES_AFTER_PACKAGE-->
+        <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
+        <!--org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=Java:BLANK_LINES_AROUND_CLASS-->
+        <setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
+        <!--org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=Java:BLANK_LINES_BEFORE_METHOD_BODY-->
+        <setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
+        <!--org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=Java:<Programmatic>-->
+        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
+        <!--org.eclipse.jdt.core.formatter.blank_lines_before_field=Java:BLANK_LINES_AROUND_FIELD-->
+        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
+        <!--org.eclipse.jdt.core.formatter.blank_lines_before_method=Java:BLANK_LINES_AROUND_METHOD-->
+        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
+        <!--org.eclipse.jdt.core.formatter.blank_lines_before_package=Java:BLANK_LINES_BEFORE_PACKAGE-->
+        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
+
+        <!--下面IDEA没有对应设置,使用对应值即可-->
+        <setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="2147483647"/>
+        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
+        <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
+        <setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
+
+        <!--org.eclipse.jdt.core.formatter.indentation.size=Java:IndentOptions:INDENT_SIZE-->
+        <setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
+        <!--org.eclipse.jdt.core.formatter.continuation_indentation=Java:IndentOptions:<Programmatic>-->
+        <setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="1"/>
+        <!--org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=Java:<Programmatic>-->
+        <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
+        <!--org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=Java:IndentOptions:SMART_TABS-->
+        <setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
+        <!--org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=Java:INDENT_CASE_FROM_SWITCH-->
+        <setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
+        <!--KEEP_INDENTS_ON_EMPTY_LINES-->
+        <setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
+        <!--org.eclipse.jdt.core.formatter.tabulation.size=Java:IndentOptions:<Programmatic>-->
+        <setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
+        <!--Java:IndentOptions:<Programmatic>-->
+        <setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
+
+
+        <!--下面IDEA没有对应设置,使用对应值即可-->
+        <setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
+        <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header"
+                 value="true"/>
+        <setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
+        <setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="1"/>
+
+        <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header"
+                 value="true"/>
+        <setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
+        <setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
+        <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header"
+                 value="true"/>
+
+
+        <!--Java:<Programmatic>-->
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
+
+        <!--下面没有对应的IDEA设置,Eclipse先使用对应值-->
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="16"/>
+
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
+
+
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
+
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression"
+                 value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
+        <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="16"/>
+
+        <!--IDEA默认配置在同一行,Eclipse使用对应值即可-->
+        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/>
+        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="common_lines"/>
+        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/>
+        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration"
+                 value="common_lines"/>
+        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/>
+        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="common_lines"/>
+        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="common_lines"/>
+        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="common_lines"/>
+        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="common_lines"/>
+        <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="common_lines"/>
+
+        <!--Java:BINARY_OPERATION_SIGN_ON_NEXT_LINE-->
+        <setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
+
+        <!--ASSIGNMENT_WRAP 需要设置为 WRAP_AS_NEEDED  WRAP_AS_NEEDED . Add in jdt.core-3.12,it's not work in previous version -->
+        <setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/>
+
+        <!--IDEA无配置项,Eclipse使用对应值即可-->
+        <setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
+        <setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="true"/>
+        <setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
+        <setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
+        <setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="false"/>
+        <setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
+        <setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
+
+        <!--org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=Java:KEEP_CONTROL_STATEMENT_IN_ONE_LINE-->
+        <setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
+        <!--org.eclipse.jdt.core.formatter.compact_else_if=Java:SPECIAL_ELSE_IF_TREATMENT-->
+        <setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
+        <!--Java:ALIGN_GROUP_FIELD_DECLARATIONS-->
+        <setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
+        <!--Java:<Programmatic>-->
+        <setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
+        <setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
+
+        <!--统一为end_of_lint,IDEA默认一致-->
+        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
+        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
+        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
+        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
+        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="end_of_line"/>
+        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
+        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
+        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration"
+                 value="end_of_line"/>
+        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
+        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
+
+
+        <!--        <setting id="org.eclipse.jdt.core.compiler.source" value="1.8"/>
+                <setting id="org.eclipse.jdt.core.compiler.compliance" value="1.8"/>
+                <setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.8"/>
+                        <setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
+                                <setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
+                                        <setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled"/>
+                -->
+        <!--Java:KEEP_SIMPLE_BLOCKS_IN_ONE_LINE-->
+        <setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
+
+        <!--Java:CLASS_BRACE_STYLE,统一使用end_of_line TODO-->
+        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
+        <setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
+
+        <!--org.eclipse.jdt.core.formatter.lineSplit=RIGHT_MARGIN-->
+        <setting id="org.eclipse.jdt.core.formatter.lineSplit" value="120"/>
+    </profile>
+</profiles>

+ 12 - 0
product-hunt/pom.xml

@@ -20,6 +20,7 @@
         <jwt.version>4.4.0</jwt.version>
         <tk-mybatis.version>5.0.1</tk-mybatis.version>
         <jasypt.version>3.0.5</jasypt.version>
+        <spring-ai.version>1.0.0-M6</spring-ai.version>
     </properties>
 
     <dependencyManagement>
@@ -31,6 +32,13 @@
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
+            <dependency>
+                <groupId>org.springframework.ai</groupId>
+                <artifactId>spring-ai-bom</artifactId>
+                <version>${spring-ai.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 
@@ -60,6 +68,10 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-graphql</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.ai</groupId>
+            <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-tx</artifactId>

+ 56 - 0
product-hunt/src/main/java/com/producthunt/server/AppEncryptor.java

@@ -0,0 +1,56 @@
+package com.producthunt.server;
+
+import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
+import org.jasypt.iv.RandomIvGenerator;
+import org.jasypt.salt.RandomSaltGenerator;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 应用Jasypt加解密工具
+ * @date 2025/2/24 13:06
+ */
+public class AppEncryptor {
+
+    /**
+     * 密码
+     */
+    private String password;
+
+    /**
+     * 算法
+     */
+    private String algorithm;
+
+    /**
+     * 加解密实例
+     */
+    private StandardPBEStringEncryptor standardPBEStringEncryptor;
+
+    public AppEncryptor(String password, String algorithm) {
+        this.password = password;
+        this.algorithm = algorithm;
+
+        standardPBEStringEncryptor = new StandardPBEStringEncryptor();
+        standardPBEStringEncryptor.setPassword(password);
+        standardPBEStringEncryptor.setAlgorithm(algorithm);
+        standardPBEStringEncryptor.setSaltGenerator(new RandomSaltGenerator());
+        standardPBEStringEncryptor.setIvGenerator(new RandomIvGenerator());
+    }
+
+    /**
+     * 加密并输出加密结果
+     * @param filedName 待加密的字段名称
+     * @param filedStr 待加密的字符串
+     */
+    public void encryptAndShow(String filedName, String filedStr) {
+        String encryptStr = standardPBEStringEncryptor.encrypt(filedStr);
+        System.out.println(String.format("%s:%s", filedName, encryptStr));
+    }
+
+    public static void main(String[] args) {
+        AppEncryptor appEncryptor = new AppEncryptor("7njoTmM0bbapL7d4DDHh", "PBEWithMD5AndDES");
+        appEncryptor.encryptAndShow("api", "https://api.siliconflow.cn");
+        appEncryptor.encryptAndShow("key", "sk-hgbymehndbqetoxivmgzvlzzewhgejdhzafmmummompzyfbv");
+    }
+}

+ 0 - 4
product-hunt/src/main/java/com/producthunt/server/Application.java

@@ -17,10 +17,6 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 public class Application {
 
     public static void main(String[] args) {
-        System.setProperty("http.proxyHost", "127.0.0.1");
-        System.setProperty("http.proxyPort", "10809");
-        System.setProperty("https.proxyHost", "127.0.0.1");
-        System.setProperty("https.proxyPort", "10809");
         SpringApplication.run(Application.class, args);
     }
 }

+ 60 - 0
product-hunt/src/main/java/com/producthunt/server/PostNode.java

@@ -0,0 +1,60 @@
+package com.producthunt.server;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description Product Hunt的Post信息
+ * @date 2025/2/24 15:44
+ */
+@Data
+public class PostNode {
+
+    /**
+     * 帖子ID
+     */
+    private Long id;
+
+    /**
+     * 铁子名称
+     */
+    private String name;
+
+    /**
+     * 帖子的标语
+     */
+    private String tagline;
+
+    /**
+     * 帖子信息
+     */
+    private String description;
+
+    /**
+     * 投票数
+     */
+    private Integer votesCount;
+
+    /**
+     * 帖子的创建日期和时间
+     */
+    private LocalDateTime createdAt;
+
+    /**
+     * 帖子被特色展示的日期和时间
+     */
+    private LocalDateTime featuredAt;
+
+    /**
+     * 指向该帖子网站的重定向 URL
+     */
+    private String website;
+
+    /**
+     * 帖子URL
+     */
+    private String url;
+}

+ 23 - 0
product-hunt/src/main/java/com/producthunt/server/PostPageInfo.java

@@ -0,0 +1,23 @@
+package com.producthunt.server;
+
+import lombok.Data;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description Product Hunt的Post 分页信息
+ * @date 2025/2/24 15:42
+ */
+@Data
+public class PostPageInfo {
+
+    /**
+     * 向前分页时,是否还有下一页
+     */
+    private Boolean hasNextPage;
+
+    /**
+     * 当继续向前翻页时,游标开始的位置
+     */
+    private String endCursor;
+}

+ 25 - 0
product-hunt/src/main/java/com/producthunt/server/PostResponse.java

@@ -0,0 +1,25 @@
+package com.producthunt.server;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description Product Hunt的Post查询结果
+ * @date 2025/2/24 15:55
+ */
+@Data
+public class PostResponse {
+
+    /**
+     * 帖子列表
+     */
+    private List<PostNode> nodes;
+
+    /**
+     * 分页信息
+     */
+    private PostPageInfo pageInfo;
+}

+ 108 - 33
product-hunt/src/main/java/com/producthunt/server/TestController.java

@@ -1,14 +1,27 @@
 package com.producthunt.server;
 
-import com.producthunt.server.feign.ProductHuntFeign;
-import com.producthunt.server.feign.dto.OauthRequest;
-import com.producthunt.server.feign.dto.OauthResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.ai.chat.client.ChatClient;
+import org.springframework.ai.chat.messages.Message;
+import org.springframework.ai.chat.prompt.Prompt;
+import org.springframework.ai.chat.prompt.PromptTemplate;
+import org.springframework.ai.chat.prompt.SystemPromptTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.Resource;
 import org.springframework.graphql.client.GraphQlClient;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.producthunt.server.core.config.ProductHuntConfig;
+import com.producthunt.server.feign.ProductHuntFeign;
+import com.producthunt.server.feign.dto.OauthRequest;
+import com.producthunt.server.feign.dto.OauthResponse;
+
 /**
  * @author tyuio
  * @version 1.0.0
@@ -22,41 +35,103 @@ public class TestController {
     @Autowired
     private ProductHuntFeign productHuntFeign;
 
+    @Autowired
+    private ProductHuntConfig productHuntConfig;
+
     @GetMapping("/t1")
     public OauthResponse t1() {
         OauthRequest oauthRequest = new OauthRequest();
-        oauthRequest.setClientId("W-ZZ-mP7LBniA_X6IrFxOt1Vss0XN633-6cQW8ztols");
-        oauthRequest.setClientSecret("XD80iNZ0vYuET5vNqzgInu8I-fFJO-vjZpL4AhlWPf4");
+        oauthRequest.setClientId(productHuntConfig.getClientId());
+        oauthRequest.setClientSecret(productHuntConfig.getClientSecret());
         return productHuntFeign.getOauthToken(oauthRequest);
     }
 
-//    @Autowired
-//    private GraphQlClient graphQlClient;
-//
-//    @GetMapping("/t2")
-//    public String t2() {
-//        String document = """
-//    {
-//      posts(order: VOTES) {
-//        nodes {
-//          id
-//          name
-//          tagline
-//          description
-//          votesCount
-//          createdAt
-//          featuredAt
-//          website
-//          url
-//        }
-//        pageInfo {
-//          hasNextPage
-//          endCursor
-//        }
-//      }
-//    }
-//    """;
-//        return graphQlClient.document(document).retrieveSync("posts").toString();
+    @Autowired
+    private GraphQlClient graphQlClient;
+
+    /**
+     * Product Hunt 查询模板(按投票数排序,限定时间范围)
+     */
+    private final String queryTemplate = """
+        {
+                   posts(order: VOTES, postedAfter: "%sT00:00:00Z", postedBefore: "%sT23:59:59Z", after: "%s") {
+                     nodes {
+                       id
+                       name
+                       tagline
+                       description
+                       votesCount
+                       createdAt
+                       featuredAt
+                       website
+                       url
+                     }
+                     pageInfo {
+                       hasNextPage
+                       endCursor
+                     }
+                   }
+                 }
+        """;
+
+    @GetMapping("/t2")
+    public List<PostNode> t2() {
+        List<PostNode> posts = new ArrayList<>();
+        boolean hasNextPage = true;
+        String endCursor = "";
+        String dateStr = "2025-02-22";
+        while (hasNextPage) {
+            // 设置查询模板并发起查询,好像无法直接一次性查询指定数量,只能分页查询并且要自己控制所需数量
+            String queryDocument = String.format(queryTemplate, dateStr, dateStr, endCursor);
+            PostResponse postResponse =
+                graphQlClient.document(queryDocument).retrieveSync("posts").toEntity(PostResponse.class);
+            // 把获取到的帖子信息放入容器
+            if (!CollectionUtils.isEmpty(postResponse.getNodes())) {
+                posts.addAll(postResponse.getNodes());
+            }
+            // 帖子数量大于30则退出
+            if (posts.size() > 30) {
+                break;
+            }
+            // 没有下一页了则跳出循环
+            if (!postResponse.getPageInfo().getHasNextPage()) {
+                break;
+            }
+            hasNextPage = postResponse.getPageInfo().getHasNextPage();
+        }
+        return posts.subList(0, 30);
+    }
+
+    @Autowired
+    private ChatClient.Builder chatClientBuilder;
+
+    // 通过@Value注解注入资源文件
+    @Value("classpath:/prompts/system-message.st")
+    private Resource promptSystemMessage;
+
+    @GetMapping("/t3")
+    public String t3() {
+
+//        // 1. 定义用户消息模板
+        String userText = """
+    Enter a prompt, set your preferences, and let AI build a high-converting, fully optimized eCommerce store in minutes—no coding, no design skills, no hassle. Launch your store effortlessly and start selling instantly! 🚀
+    """;
+//// 创建用户提示模板对象
+//        PromptTemplate userPromptTemplate = new PromptTemplate(userText);
+//// 根据模板和参数创建用户消息
+//        Message userMessage = userPromptTemplate.createMessage();
 //
-//    }
+//// 创建系统提示模板对象
+//        SystemPromptTemplate systemPromptTemplate = new SystemPromptTemplate(promptSystemMessage);
+//// 根据模板和参数创建系统消息
+//        Message systemMessage = systemPromptTemplate.createMessage();
+//// 创建包含其他消息和系统消息的提示
+//        Prompt prompt = new Prompt(List.of(userMessage, systemMessage));
+
+// 3. 创建包含用户消息和系统消息的提示
+
+        // 单个提问
+        ChatClient chatClient = chatClientBuilder.defaultSystem(promptSystemMessage).build();
+        return chatClient.prompt().user(userText).call().content();
+    }
 }

+ 32 - 0
product-hunt/src/main/java/com/producthunt/server/core/config/FeignConfig.java

@@ -1,8 +1,17 @@
 package com.producthunt.server.core.config;
 
 import feign.Logger;
+import feign.codec.Decoder;
+import org.springframework.beans.factory.ObjectFactory;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.cloud.openfeign.support.SpringDecoder;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.http.MediaType;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * @className FeignConfig
@@ -23,4 +32,27 @@ public class FeignConfig {
     public Logger.Level devLogLevel() {
         return Logger.Level.FULL;
     }
+
+    /**
+     * 增加转换支持
+     *
+     * @return
+     */
+    @Bean
+    public Decoder feignDecoder() {
+        Jackson2HttpConverter jackson2HttpConverter = new Jackson2HttpConverter();
+        ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(jackson2HttpConverter);
+        return new SpringDecoder(objectFactory);
+    }
+
+    /**
+     * content-type = text/plain 增加JSON转换支持
+     */
+    public class Jackson2HttpConverter extends MappingJackson2HttpMessageConverter {
+        public Jackson2HttpConverter() {
+            List<MediaType> mediaTypes = new ArrayList<>();
+            mediaTypes.add(MediaType.TEXT_PLAIN);
+            setSupportedMediaTypes(mediaTypes);
+        }
+    }
 }

+ 1 - 1
product-hunt/src/main/java/com/producthunt/server/core/config/GraphQLClientConfig.java

@@ -17,6 +17,6 @@ public class GraphQLClientConfig {
     @Bean
     public GraphQlClient graphQLClient() {
         return HttpSyncGraphQlClient.builder().url("https://api.producthunt.com/v2/api/graphql")
-                .header("Authorization", "Bearer v3QzROqoB52Y7nf9DhX5-Vg_g_gRsoPtgFmM1lIZTRE").build();
+                .header("Authorization", "Bearer fyE_0xkhXbkLw_81QhuyMHRXqcPnayzkGqVXEftAL2g").build();
     }
 }

+ 30 - 0
product-hunt/src/main/java/com/producthunt/server/core/config/ProductHuntConfig.java

@@ -0,0 +1,30 @@
+package com.producthunt.server.core.config;
+
+import lombok.Data;
+import lombok.Getter;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description Product Hunt配置对象
+ * @date 2025/2/24 11:20
+ */
+@Data
+@Component
+@ConfigurationProperties("product-hunt")
+public class ProductHuntConfig {
+
+    /**
+     * 应用ID
+     */
+    private String clientId;
+
+    /**
+     * 应用密钥
+     */
+    private String clientSecret;
+}

+ 1 - 1
product-hunt/src/main/java/com/producthunt/server/feign/ProductHuntFeign.java

@@ -22,5 +22,5 @@ public interface ProductHuntFeign {
      * @return
      */
     @PostMapping("/v2/oauth/token")
-    OauthResponse getOauthToken(@SpringQueryMap OauthRequest request);
+    OauthResponse getOauthToken(@RequestBody OauthRequest request);
 }

+ 5 - 3
product-hunt/src/main/java/com/producthunt/server/feign/dto/OauthRequest.java

@@ -1,5 +1,7 @@
 package com.producthunt.server.feign.dto;
 
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import feign.Param;
 import lombok.Data;
 
@@ -15,18 +17,18 @@ public class OauthRequest {
     /**
      * 应用id
      */
-    @Param("client_id")
+    @JsonProperty("client_id")
     private String clientId;
 
     /**
      * 应用密钥
      */
-    @Param("client_secret")
+    @JsonProperty("client_secret")
     private String clientSecret;
 
     /**
      * 授权类型
      */
-    @Param("grant_type")
+    @JsonProperty("grant_type")
     private String grantType = "client_credentials";
 }

+ 28 - 0
product-hunt/src/main/java/com/producthunt/server/feign/dto/OauthResponse.java

@@ -1,10 +1,38 @@
 package com.producthunt.server.feign.dto;
 
+import com.fasterxml.jackson.annotation.JsonAlias;
+import lombok.Data;
+
 /**
  * @author tyuio
  * @version 1.0.0
  * @description ProductHunt鉴权响应
  * @date 2025/2/17 19:13
  */
+@Data
 public class OauthResponse {
+
+    /**
+     * 访问的token
+     */
+    @JsonAlias("access_token")
+    private String accessToken;
+
+    /**
+     * token类型
+     */
+    @JsonAlias("token_type")
+    private String tokenType;
+
+    /**
+     * 权限范围
+     */
+    @JsonAlias("scope")
+    private String scope;
+
+    /**
+     * 时间戳
+     */
+    @JsonAlias("created_at")
+    private long createdAt;
 }

+ 13 - 1
product-hunt/src/main/resources/application-dev.yaml

@@ -2,7 +2,19 @@ spring:
   datasource:
     username: root
     url: jdbc:mysql://localhost:3306/data_easy?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
+  ai:
+    openai:
+      base-url: ENC(H4FobFSxLct+ZapdAa5GWKbBC3u32wRgWrVaksCJyHvyTPmpqz2P4gq7QfFPIARI)
+      api-key: ENC(CXar5AEVP7jIiOpZfEzkh/4TEi0CePm+sx3ObEgYcUn4ZvDfFlprjyiU3j22x3n/bVmmC5hQlm4Zs23FnGNCB66SQ0ATB2hJ)
+      chat:
+        options:
+          model: deepseek-ai/DeepSeek-V3
 
 logging:
   level:
-    com.producthunt.server: debug
+    com.producthunt.server: debug
+    org.springframework.ai.chat.client.advisor=DEBUG:
+
+product-hunt:
+  client-id: ENC(ANqnssfEBJfIYM2s2D4ZHw1kwndMGp1zxxz3/c1VrsoiwauH5SQq/dB9NObC1AnnI19/AodFB8/bEja1xf+zXw==)
+  client-secret: ENC(RnNMBLx32FzSOlA21bzg6vcYpaVqrmGlMj5rKQtr+/LuVCBAP7fad9YjeqOt0kfrJvrYZ9z8/DR76aDv7PxiUw==)

+ 20 - 0
product-hunt/src/main/resources/application-prod.yaml

@@ -0,0 +1,20 @@
+spring:
+  datasource:
+    username: ENC(NSemTCqIcv//3e9jGN32BW/7W5T/U41S)
+    password: ENC(JCvpZk2f9TBxI/JWILBrgj8CRGh9F6Bbx7TX42VBOsCuAwQw0kyppA==)
+    url: ENC(qquG8FQIQ1L/5VzI18bKQcpkwpNyeYQYUv0pWtdK9JjaNpIyJqcOee48ZqRFg7Kd0Hm2/tZBA6mp21zVX7lqLCL1QWWhZ1+7rldsEO1ujD3ZaAsNugFvAyyyeqAfnGwm9CWk+XwN0MfRLjF/SvD/+W9D9Y/A1EjfpB2zLWGS+W3zI1//3Lj9iZNTCGFw1XTcZg89D700vubl9VWqzmIXpOj+sJKXQ8DS)
+  ai:
+    openai:
+      base-url: ENC(aYgDpynp/i5RsEqxPYMei+leHCdZhhT+mr63Mr9ebQBwNZZMpYYsM2D3lNgrMFf/)
+      api-key: ENC(DxYwiHLqdAh0/PQGtSAIVhVVyGWSQcUjAwmm+0/PpgIUaF3Y4K1k7RBZTtop2kK+1MYEeLVYGEdnGo/YtJP3zu/mlQY5lwqi)
+      chat:
+        options:
+          model: deepseek-ai/DeepSeek-V3
+
+logging:
+  level:
+    com.producthunt.server: info
+
+product-hunt:
+  client-id: ENC(uiT7ZiWWHooEYfs42QqDWMxwMgE18uEaE7PMVB2/AYURrn//Jd54BO6Q1a/J6mGFdrQwiO02X0YZeobglUXW2A==)
+  client-secret: ENC(3DYuspmnbTjlJJ0H+kzpvtoiEzKZXNQD5tKDDkI8K85funxQKMj5fTaLOjsepB40BO4HzTD5SBDDy9WTfUbVSA==)

+ 1 - 0
product-hunt/src/main/resources/prompts/system-message.st

@@ -0,0 +1 @@
+你是世界上最专业的翻译工具,擅长英文和中文互译。你是一位精通英文和中文的专业翻译,尤其擅长将IT公司黑话和专业词汇翻译成简洁易懂的地道表达。你的任务是将以下内容翻译成地道的中文,风格与科普杂志或日常对话相似。