ludc
2024-02-29 8ef9e366be48dc5e8e52617ea8ed48b37a0e1f74
 在线部署功能上传,标准申请接口bug修改
已修改17个文件
已添加18个文件
1915 ■■■■ 文件已修改
Source/ExampleIntegratedPushCalled/.idea/.gitignore 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ExampleIntegratedPushCalled/.idea/compiler.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ExampleIntegratedPushCalled/.idea/easyCodeTableSetting.xml 694 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ExampleIntegratedPushCalled/.idea/jarRepositories.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ExampleIntegratedPushCalled/.idea/misc.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ExampleIntegratedPushCalled/src/main/java/com/vci/ubcs/example/ExampleIntgraPushCallApplication.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ExampleIntegratedPushCalled/src/main/java/com/vci/ubcs/example/controller/MyServiceTest.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ExampleIntegratedPushCalled/src/main/java/com/vci/ubcs/example/controller/PushIntegrationController.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ExampleIntegratedPushCalled/src/main/java/com/vci/ubcs/example/controller/TestCalledIntegrationController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ExampleIntegratedPushCalled/src/main/java/com/vci/ubcs/example/entity/RequestData.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ExampleIntegratedPushCalled/src/main/java/com/vci/ubcs/example/service/ICalledIntegrationService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ExampleIntegratedPushCalled/src/main/java/com/vci/ubcs/example/service/impl/CalledIntegrationServiceImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ExampleIntegratedPushCalled/src/main/java/com/vci/ubcs/example/util/HttpUtils.java 205 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ExampleIntegratedPushCalled/src/main/resources/application.yml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ExampleIntegratedPushCalled/target/classes/application.yml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ExampleIntegratedPushCalled/编码资源管理系统集成统一接口json参数示例 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/service-deploy/uploadServiceJarDialog.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/system/deploy.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/LICENSE 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/pom.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-gateway/pom.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-admin/pom.xml 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/CustomUserDetailsService.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/SecurityConfiguration.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/security/CustomAuthenticationManager.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/security/InternalAuthorizationManager.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/DockingSystemConfig.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-deploy-api/pom.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/HttpUtils.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 110 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/webService/config/VciCxfPublishConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-deploy/src/main/java/com/vci/ubcs/deploy/service/impl/DeployAppsServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ExampleIntegratedPushCalled/.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
Source/ExampleIntegratedPushCalled/.idea/compiler.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="CompilerConfiguration">
    <annotationProcessing>
      <profile name="Maven default annotation processors profile" enabled="true">
        <sourceOutputDir name="target/generated-sources/annotations" />
        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
        <outputRelativeToContentRoot value="true" />
        <module name="ExampleIntegratedPushCalled" />
      </profile>
    </annotationProcessing>
  </component>
</project>
Source/ExampleIntegratedPushCalled/.idea/easyCodeTableSetting.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,694 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="EasyCodeTableSetting">
    <option name="tableInfoMap">
      <map>
        <entry key="UBCS_MDM.PL_CODE_BASICSEC">
          <value>
            <TableInfoDTO>
              <option name="fullColumn">
                <list>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="oid" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="revisionoid" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="nameoid" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="btmname" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="lastr" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="firstr" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="lastv" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="firstv" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="creator" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="createtime" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="lastmodifier" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="lastmodifytime" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="revisionrule" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="versionrule" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="revisionseq" />
                    <option name="type" value="java.lang.Long" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="revisionvalue" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="versionseq" />
                    <option name="type" value="java.lang.Long" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="versionvalue" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="lctid" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="lcstatus" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="ts" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="id" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="name" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="description" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="owner" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="copyfromversion" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="sectype" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="pkcoderule" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="ordernum" />
                    <option name="type" value="java.lang.Long" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="getvalueclass" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="codedateformatstr" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="codeseclengthtype" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="codeseclength" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="codeleveltype" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="codelevelvalue" />
                    <option name="type" value="java.lang.Long" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="valuecutlength" />
                    <option name="type" value="java.lang.Long" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="valuecuttype" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="codegetvaluetype" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="refercodeclassifyoid" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="referconfig" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="refervalueinfo" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="filtersql" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="serialstart" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="serialstep" />
                    <option name="type" value="java.lang.Long" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="codefilltype" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="codefilltypetext" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="codefillseparator" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="codefilllength" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="codefilllimit" />
                    <option name="type" value="java.lang.Long" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="codefillflag" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="customcodeserialclass" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="matchclassifyvalueflag" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="parentclassifysecoid" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="nullableflag" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="componentcodeflag" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="serialdependflag" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="displayflag" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="serialdependorder" />
                    <option name="type" value="java.lang.Long" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="referattributename" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="referattributeid" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="referbtmname" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="referbtmid" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                </list>
              </option>
              <option name="name" value="PlCodeBasicsec" />
              <option name="preName" value="" />
              <option name="saveModelName" value="ubcs-omd-api" />
              <option name="savePackageName" value="" />
              <option name="savePath" value="$USER_HOME$/Desktop" />
              <option name="templateGroupName" value="Default" />
            </TableInfoDTO>
          </value>
        </entry>
        <entry key="UBCS_MDM.PL_CODE_REFERCONFIG">
          <value>
            <TableInfoDTO>
              <option name="comment" value="参照配置表" />
              <option name="fullColumn">
                <list>
                  <ColumnInfoDTO>
                    <option name="comment" value="主键" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="oid" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="revisionoid" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="nameoid" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="btmname" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="lastr" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="firstr" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="lastv" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="firstv" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="creator" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="createtime" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="revisionseq" />
                    <option name="type" value="java.lang.Long" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="revisionvalue" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="versionseq" />
                    <option name="type" value="java.lang.Long" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="versionvalue" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="lctid" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="lcstatus" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="ts" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="name" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="description" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="owner" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="copyfromversion" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="ordernum" />
                    <option name="type" value="java.lang.Long" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="参照的业务类型" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="refertype" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="显示的属性" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="textfield" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="存储值的属性" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="valuefield" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="参照窗口类型" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="type" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="自定义的后台路径" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="url" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="服务的地址" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="backpath" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="请求后台的协议方式" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="method" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="窗口显示的高度" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="height" />
                    <option name="type" value="java.lang.Long" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="过滤属性请求参数" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="paramforformkey" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="是否多选" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="ismuti" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="映射其他属性" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="mapfields" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="参考的UI上下文" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="refercontent" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="平台的表格编号" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="displaytable" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="每页显示条数" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="limit" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="排序字段" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="sortfield" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="排序类型" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="sorttype" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="树形的上级属性" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="parentfieldname" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="上级属性值对应属性" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="parentusedfield" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="根节点的值" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="parentvalue" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="树加载方式" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="loadtype" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                  <ColumnInfoDTO>
                    <option name="comment" value="是否只能选择叶子节点" />
                    <option name="custom" value="false" />
                    <option name="ext" value="{}" />
                    <option name="name" value="onlyleaf" />
                    <option name="type" value="java.lang.String" />
                  </ColumnInfoDTO>
                </list>
              </option>
              <option name="name" value="PlCodeReferconfig" />
              <option name="preName" value="" />
              <option name="saveModelName" value="" />
              <option name="savePackageName" value="" />
              <option name="savePath" value="" />
              <option name="templateGroupName" value="" />
            </TableInfoDTO>
          </value>
        </entry>
      </map>
    </option>
  </component>
</project>
Source/ExampleIntegratedPushCalled/.idea/jarRepositories.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="RemoteRepositoriesConfiguration">
    <remote-repository>
      <option name="id" value="central" />
      <option name="name" value="Central Repository" />
      <option name="url" value="https://repo.maven.apache.org/maven2" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="rdc-releases" />
      <option name="name" value="rdc-releases" />
      <option name="url" value="http://dev.yunkeruida.top:9000/repository/maven-releases/" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="central" />
      <option name="name" value="central" />
      <option name="url" value="http://dev.yunkeruida.top:9000/repository/maven-public/" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="central" />
      <option name="name" value="Maven Central repository" />
      <option name="url" value="https://repo1.maven.org/maven2" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="jboss.community" />
      <option name="name" value="JBoss Community repository" />
      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="rdc-snapshots" />
      <option name="name" value="rdc-snapshots" />
      <option name="url" value="http://dev.yunkeruida.top:9000/repository/maven-snapshots/" />
    </remote-repository>
  </component>
</project>
Source/ExampleIntegratedPushCalled/.idea/misc.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ExternalStorageConfigurationManager" enabled="true" />
  <component name="MavenProjectsManager">
    <option name="originalFiles">
      <list>
        <option value="$PROJECT_DIR$/pom.xml" />
      </list>
    </option>
  </component>
  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
    <output url="file://$PROJECT_DIR$/out" />
  </component>
  <component name="ProjectType">
    <option name="id" value="jpab" />
  </component>
</project>
Source/ExampleIntegratedPushCalled/src/main/java/com/vci/ubcs/example/ExampleIntgraPushCallApplication.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.vci.ubcs.example;
import javafx.application.Application;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/** é›†æˆæŽ¨é€ï¼Œè¢«è°ƒä»£ç ç¤ºä¾‹
 * @author ludc
 * @date 2024/2/27 19:40
 */
@SpringBootApplication
public class ExampleIntgraPushCallApplication {
    public static void main(String[] args) {
        SpringApplication.run(ExampleIntgraPushCallApplication.class, args);
    }
}
Source/ExampleIntegratedPushCalled/src/main/java/com/vci/ubcs/example/controller/MyServiceTest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
package com.vci.ubcs.example.controller;
import com.alibaba.fastjson.JSONObject;
import com.vci.ubcs.example.util.HttpUtils;
import lombok.AllArgsConstructor;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
/**
 * @author ludc
 * @date 2024/2/20 22:04
 */
@RestController
@AllArgsConstructor
@RequestMapping("/erpTest")
public class MyServiceTest {
    @GetMapping("/test1")
    public void testMyService() {
        /*MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
        params.add("dataType","json");
//        params.add("dataString","data:{object:[{\"classCodde\":\"RENYUAN\",\"itemid\":\"19986015\",\"code\":\"698021151\",\"library\":\"RENYUAN\",\"pro\":[{\"filedName\":\"sfz\",\"outName\":\"身份证\",\"filedValue\":\"\"}]}]}");
        NodeJosnDTO nodeJosnDTO = new NodeJosnDTO();
        NodedataDTO nodeDataDTO = new NodedataDTO();
        NodeObjectDTO nodeObjectDTO = new NodeObjectDTO();
        nodeObjectDTO.setCode("698021151");//设置编码
        nodeObjectDTO.setClassCode("RENYUAN");
        nodeObjectDTO.setStatus("Released");
        nodeObjectDTO.setItemid("19986015");
        nodeObjectDTO.setLibrary("RENYUAN");
        List<NodeObjectDTO> nodeObjectDTOS = new ArrayList<>();
        nodeObjectDTOS.add(nodeObjectDTO);
        nodeDataDTO.setObject(nodeObjectDTOS);
        nodeJosnDTO.setData(nodeDataDTO);
        List<NodeProDTO> nodeProDTOS = new ArrayList<>();
        NodeProDTO nodeProDTO = new NodeProDTO();
        nodeProDTO.setFiledName("sfz");
        nodeProDTO.setOutname("身份证");
        nodeProDTO.setFiledValue("");
        nodeProDTOS.add(nodeProDTO);
        nodeObjectDTO.setPro(nodeProDTOS);
        Object object = JSONObject.toJSON(nodeJosnDTO);
        String sendString = object.toString();
        XStream xStream = new XStream(new DomDriver());
        xStream.processAnnotations(NodedataDTO.class);
        xStream.autodetectAnnotations(true);
//        sendString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO);
        params.add("dataString",sendString);
        MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
        String backString = HttpUtils.post("http://localhost:8118/test/test", params, headers);*/
    }
}
Source/ExampleIntegratedPushCalled/src/main/java/com/vci/ubcs/example/controller/PushIntegrationController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,89 @@
package com.vci.ubcs.example.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.vci.ubcs.example.entity.RequestData;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.List;
/**
 * ç¼–码资源管理系统统一推送
 * UBCS编码资源管理系统对,
 * å…¶ä»–集成的系统进行推送的,
 * æŽ¨é€æ”¾api定义示例
 * @author ludc
 * @date 2024/2/27 20:31
 */
@RestController("/pushIntegration")
public class PushIntegrationController {
    /**
     * æŽ¨é€æŽ¥å£è¯·æ±‚类型:post
     * Content-Type类型为x-www-form-urlencoded,或param时接口定义方式  1
     * @param dataType
     * @param dataString
     * @return
     * @throws IOException
     */
    @PostMapping("/testByForm1")
    public R test(@RequestParam String dataType, @RequestParam String dataString) throws IOException {
        // ç›¸å…³é€»è¾‘处理
        System.out.println(dataType);
        System.out.println(dataString);
        return R.status(true);
    }
    /**
     * æŽ¨é€æŽ¥å£è¯·æ±‚类型:post
     * Content-Type类型为x-www-form-urlencoded,或param时接口定义方式  2
     * @param request
     * @return
     * @throws IOException
     */
    @PostMapping("/testByForm2")
    public R test1(ServletRequest request) throws IOException {
        HttpServletRequest request1 = (HttpServletRequest) request;
        String dataString = request1.getParameter("dataString");
        ServletInputStream inputStream = request1.getInputStream();
        // è¯»å–数据
        byte[] buffer = new byte[4096];
        int len = inputStream.read(buffer);
        while (len != -1) {
            // do something with buffer
            len = inputStream.read(buffer);
        }
        String body = new String(buffer, StandardCharsets.UTF_8);
        JSONObject jsonObject = JSONObject.parseObject(body);
        JSONArray jsonArray = jsonObject.getJSONArray("dataString");
        return R.data(jsonArray);
    }
    /**
     * æŽ¨é€æŽ¥å£è¯·æ±‚类型:post
     * Content-Type类型为application/json时接口定义方式
     * @param requestData
     * @return
     * @throws IOException
     */
    @PostMapping("/testByAppjson")
    public R test1(@RequestBody RequestData requestData) throws IOException {
        // æ‹¿åˆ°è¿™ä¸ªå‚数之后取该集合中的第一个元素,就是要json转成对象的参数
        // å¦‚有具体转换要求,则根据编码器中的接口提供的配置而定,通常为dataType字段,如xml,json两种情况
        List<Object> dataString = requestData.getDataString();
        // JSONObject.parseObject(dataString,/*根据编码系统提供的对象属性而定义的对象*/);
        List<String> dataType = requestData.getDataType();
        return R.data(dataString);
    }
}
Source/ExampleIntegratedPushCalled/src/main/java/com/vci/ubcs/example/controller/TestCalledIntegrationController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.vci.ubcs.example.controller;
/**
 * æµ‹è¯•调用编码系统代码示例的api定义
 * @author ludc
 * @date 2024/2/27 20:34
 */
public class TestCalledIntegrationController {
}
Source/ExampleIntegratedPushCalled/src/main/java/com/vci/ubcs/example/entity/RequestData.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.vci.ubcs.example.entity;
import lombok.Data;
import java.util.List;
/**
 * ç¼–码系统推送,接口接收参数定义实体类
 * @author ludc
 * @date 2024/2/20 22:22
 */
@Data
public class RequestData {
    /**
     * é€šå¸¸ä¼šå¸¦è¿™ä¸ªå‚æ•°
     */
    private List<String> dataType;
    /**
     * å¿…传参数
     */
    private List<Object> dataString;
    /**
        å…¶ä»–参数通过与根据编码资源管理系统沟通后获取,并且也是List类型
    */
}
Source/ExampleIntegratedPushCalled/src/main/java/com/vci/ubcs/example/service/ICalledIntegrationService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.vci.ubcs.example.service;
/**
 * ç»Ÿä¸€ç”³è¯·æŽ¥å£ï¼šUBCS编码资源管理系统,被其他集成的系统的通用接口调用示例
 * @author ludc
 * @date 2024/2/27 20:34
 */
public interface ICalledIntegrationService {
    /**
     * ç¼–码系统,统一申请接口,用http,rest方式调用
     */
    void sendApplyCodeByRest();
    /**
     * ç¼–码系统,统一申请接口,用WebService方式调用
     */
    void sendApplyCodeByWebService();
}
Source/ExampleIntegratedPushCalled/src/main/java/com/vci/ubcs/example/service/impl/CalledIntegrationServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.vci.ubcs.example.service.impl;
import com.vci.ubcs.example.service.ICalledIntegrationService;
import org.springframework.stereotype.Service;
/**
 * ç»Ÿä¸€ç”³è¯·æŽ¥å£ï¼šUBCS编码资源管理系统,被其他集成的系统的通用接口调用示例
 * @author ludc
 * @date 2024/2/27 20:34
 */
@Service
public class CalledIntegrationServiceImpl implements ICalledIntegrationService {
    /**
     * ç¼–码系统,统一申请接口调用
     */
    @Override
    public void sendApplyCodeByRest() {
    }
    /**
     * ç¼–码系统,统一申请接口,用WebService方式调用
     */
    @Override
    public void sendApplyCodeByWebService() {
    }
}
Source/ExampleIntegratedPushCalled/src/main/java/com/vci/ubcs/example/util/HttpUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,205 @@
package com.vci.ubcs.example.util;
import org.springframework.http.*;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletRequest;
/**
 * @author ludc
 * @date 2024/2/27 20:18
 */
public class HttpUtils {
    //Content-Type的key
    public static String CONTENT_TYPE = "Content-Type";
    //json数据
    public static String CONTENT_TYPE_JSON = MediaType.APPLICATION_JSON_VALUE;
    public static String CONTENT_TYPE_JSON_UTF8 = MediaType.APPLICATION_JSON_UTF8_VALUE;
    //表单格式,默认
    public static String CONTENT_TYPE_TEXT = MediaType.APPLICATION_FORM_URLENCODED_VALUE;
    /**
     * get请求
     *
     * @param url
     * @return
     */
    public static String get(String url) {
        return get(url, null);
    }
    /**
     * get请求
     *
     * @param url
     * @param headers è¯·æ±‚头
     * @return
     */
    public static String get(String url, MultiValueMap<String, String> headers) {
        return request(url, null, headers, HttpMethod.GET);
    }
    /**
     * post请求
     *
     * @param url
     * @param params è¯·æ±‚参数
     * @return
     */
    public static String post(String url, MultiValueMap<String, String> params) {
        return post(url, params, null);
    }
    /**
     * post请求
     *
     * @param url
     * @param params  è¯·æ±‚参数
     * @param headers è¯·æ±‚头
     * @return
     */
    public static String post(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
        return request(url, params, headers, HttpMethod.POST);
    }
    /**
     * post请求 TODO: 2024-02-25改,为了满足根据Content-type的类型来发请求,并且param中的json是最后的时候发送请求再转
     *
     * @param url
     * @param params  è¯·æ±‚参数
     * @param headers è¯·æ±‚头
     * @return
     */
    public static String postByMediaType(String url, MultiValueMap<String, Object> params, MultiValueMap<String, String> headers,MediaType mediaType) {
        return request(url, params, headers, HttpMethod.POST,mediaType);
    }
    /**
     * put请求
     *
     * @param url
     * @param params è¯·æ±‚参数
     * @return
     */
    public static String put(String url, MultiValueMap<String, String> params) {
        return put(url, params, null);
    }
    /**
     * put请求
     *
     * @param url
     * @param params  è¯·æ±‚参数
     * @param headers è¯·æ±‚头
     * @return
     */
    public static String put(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
        return request(url, params, headers, HttpMethod.PUT);
    }
    /**
     * delete请求
     *
     * @param url
     * @param params è¯·æ±‚参数
     * @return
     */
    public static String delete(String url, MultiValueMap<String, String> params) {
        return delete(url, params, null);
    }
    /**
     * delete请求
     *
     * @param url
     * @param params  è¯·æ±‚参数
     * @param headers è¯·æ±‚头
     * @return
     */
    public static String delete(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
        return request(url, params, headers, HttpMethod.DELETE);
    }
    /**
     * è¡¨å•请求
     *
     * @param url
     * @param params  è¯·æ±‚参数
     * @param headers è¯·æ±‚头
     * @param method  è¯·æ±‚方式
     * @return
     */
    public static String request(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers, HttpMethod method) {
        if (params == null) {
            params = new LinkedMultiValueMap<>();
        }
        return request(url, params, headers, method, MediaType.APPLICATION_FORM_URLENCODED);
    }
    /**
     * http请求
     *
     * @param url
     * @param params    è¯·æ±‚参数
     * @param headers   è¯·æ±‚头
     * @param method    è¯·æ±‚方式
     * @param mediaType å‚数类型
     * @return
     */
    public static String request(String url, Object params, MultiValueMap<String, String> headers, HttpMethod method, MediaType mediaType) {
        if (url == null || url.trim().isEmpty()) {
            return null;
        }
        RestTemplate client = new RestTemplate();
        // header
        HttpHeaders httpHeaders = new HttpHeaders();
        if (headers != null) {
            httpHeaders.addAll(headers);
        }
        // æäº¤æ–¹å¼ï¼šè¡¨å•、json
        httpHeaders.setContentType(mediaType);
        HttpEntity<Object> httpEntity = new HttpEntity(params, httpHeaders);
        ResponseEntity<String> response = client.exchange(url, method, httpEntity, String.class);
        return response.getBody();
    }
    public static MultiValueMap<String, String> set_params_headers(String key,String value,MultiValueMap<String, String> map){
        if(map==null){
            map = new LinkedMultiValueMap<>();
        }
        map.add(key,value);
        return map;
    }
    /**
     * èŽ·å–ip
     * @param request
     * @return
     */
    public static String getIpAddressFromRequest(HttpServletRequest request){
        String ip = request.getHeader("X-Forwarded-For");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        if (ip == null || ip.length() == 0 || ip.indexOf("0:0:0:0:0:0:0:1") >-1) {
            //0:0:0:0:0:0:0:1是本机在访问
            ip = "127.0.0.1";
        }
        return ip;
    }
}
Source/ExampleIntegratedPushCalled/src/main/resources/application.yml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
server:
  port: 9999
  undertow:
    threads:
      # è®¾ç½®IO线程数, å®ƒä¸»è¦æ‰§è¡Œéžé˜»å¡žçš„任务,它们会负责多个连接, é»˜è®¤è®¾ç½®æ¯ä¸ªCPU核心一个线程
      io: 16
      # é˜»å¡žä»»åŠ¡çº¿ç¨‹æ± , å½“执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
      worker: 400
    # ä»¥ä¸‹çš„配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
    buffer-size: 1024
    # æ˜¯å¦åˆ†é…çš„直接内存
    direct-buffers: true
Source/ExampleIntegratedPushCalled/target/classes/application.yml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
server:
  port: 9999
  undertow:
    threads:
      # è®¾ç½®IO线程数, å®ƒä¸»è¦æ‰§è¡Œéžé˜»å¡žçš„任务,它们会负责多个连接, é»˜è®¤è®¾ç½®æ¯ä¸ªCPU核心一个线程
      io: 16
      # é˜»å¡žä»»åŠ¡çº¿ç¨‹æ± , å½“执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
      worker: 400
    # ä»¥ä¸‹çš„配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
    buffer-size: 1024
    # æ˜¯å¦åˆ†é…çš„直接内存
    direct-buffers: true
Source/ExampleIntegratedPushCalled/±àÂë×ÊÔ´¹ÜÀíϵͳ¼¯³Éͳһ½Ó¿Újson²ÎÊýʾÀý
Source/UBCS-WEB/src/components/service-deploy/uploadServiceJarDialog.vue
@@ -101,7 +101,7 @@
      // æ–‡ä»¶ä¸Šä¼ æˆåŠŸ
      onSuccess(resbonse){
        if (Object.keys(resbonse.data).length === 0) {
            this.$message.success( "主题库分类导入成功!");
            this.$message.success( "更新包导入成功!");
            this.dialogVisible = false;
            return;
        }
Source/UBCS-WEB/src/views/system/deploy.vue
@@ -15,6 +15,7 @@
            @on-load="onLoad">
            <template slot="menu" slot-scope="{ row, index }">
                <el-button type="text"
                    :disabled="row.name === 'ubcs-deploy'"
                    icon="el-icon-upload"
                    size="small"
                    v-if="permissionList.upload"
@@ -29,6 +30,7 @@
                    {{ row.status === 'UP' ?  '重 å¯': '启 åЍ' }}
                </el-button>
                <el-button type="text"
                    :disabled="row.name === 'ubcs-deploy'"
                    v-if="permissionList.editBtn"
                    icon="el-icon-edit"
                    size="small"
@@ -67,12 +69,13 @@
      
    },
    computed: {
        ...mapGetters(["userInfo", "permission"]),
        permissionList() {
            return {
                upload: true,
                restart: true,
                editBtn: true,// this.vaildData(this.permission, true),
                addBtn: true,
                upload: this.vaildData(this.permission.deploy.deploy_upload, false),
                restart: this.vaildData(this.permission.deploy.deploy_restart, false),
                editBtn: this.vaildData(this.permission.deploy.deploy_edit, false),
                addBtn: this.vaildData(this.permission.deploy.deploy_add, false),
            };
        },
        option(){
Source/UBCS/LICENSE
@@ -1,34 +1 @@
BladeX商业授权许可协议
一、 çŸ¥è¯†äº§æƒï¼š
BladeX系列产品知识产权归上海布雷德科技有限公司独立所有
二、 è®¸å¯ï¼š
1. åœ¨æ‚¨å®Œå…¨æŽ¥å—并遵守本协议的基础上,本协议授予您使用BladeX的某些权利和非独占性许可。
2. æœ¬åè®®ä¸­ï¼Œå°†æœ¬äº§å“ä½¿ç”¨ç”¨é€”分为“专业版用途”和“企业版用途”。
3. â€œä¸“业版用途”定义:指个人在非团体机构中出于任何目的使用本产品(任何目的包括商业目的或非盈利目的)。
4. â€œä¼ä¸šç‰ˆç”¨é€””定义:指团体机构(例如公司企业、政府、学校、军队、医院、社会团体等各类组织)(不包含集团,若集团使用则需为各个子公司分别购买企业授权)出于任何目的使用本产品(任何目的包括商业目的或非盈利目的)。
三、 çº¦æŸå’Œé™åˆ¶ï¼š
1. æœ¬äº§å“åªèƒ½ç”±æ‚¨ä¸ºæœ¬åè®®è®¸å¯çš„目的而使用,您不得透露给任何第三方;
2. ä»Žæœ¬äº§å“å–得的任何信息、软件、产品或服务,您不得对其进行修改、改编或基于以上内容创建同种类别的衍生产品并售卖。
3. æ‚¨ä¸å¾—对本产品以及与之关联的商业授权进行发布、出租、销售、分销、抵押、转让、许可或发放子许可证。
4. æœ¬äº§å“å•†ä¸šæŽˆæƒç‰ˆå¯èƒ½åŒ…含一些独立功能或特性,这些功能只有在您购买商业授权后才可以使用。在未取得商业授权的情况下,您不得使用、尝试使用或复制这些授权版独立功能。
5. è‹¥æ‚¨çš„客户要求以源码方式交付软件,需缴纳企业版授权费用,否则本产品部分不得提供源码。
四、 ä¸å¾—用于非法或禁止的用途:
您在使用本产品或服务时,不得将本产品产品或服务用于任何非法用途或本协议条款、条件和声明禁止的用途。
五、 å…è´£è¯´æ˜Žï¼š
1. æœ¬äº§å“æŒ‰â€œçŽ°çŠ¶â€æŽˆäºˆè®¸å¯ï¼Œæ‚¨é¡»è‡ªè¡Œæ‰¿æ‹…ä½¿ç”¨æœ¬äº§å“çš„é£Žé™©ã€‚BladeX团队不对此提供任何明示、暗示或任何其它形式的担保和表示。在任何情况下,对于因使用或无法使用本软件而导致的任何损失(包括但不仅限于商业利润损失、业务中断或业务信息丢失),BladeX团队无需向您或任何第三方负责,即使BladeX团队已被告知可能会造成此类损失。在任何情况下, BladeX团队均不就任何直接的、间接的、附带的、后果性的、特别的、惩戒性的和处罚性的损害赔偿承担任何责任,无论该主张是基于保证、合同、侵权(包括疏忽)或是基于其他原因作出。
2. æœ¬äº§å“å¯èƒ½å†…置有第三方服务,您应自行评估使用这些第三方服务的风险,由使用此类第三方服务而产生的纠纷,全部责任由您自行承担。
3. BladeX团队不对使用本产品构建的网站中任何信息内容以及导致的任何版权纠纷、法律争议和后果承担任何责任,全部责任由您自行承担。
4. BladeX团队可能会经常提供产品更新或升级,但BladeX团队没有为根据本协议许可的产品提供维护或更新的责任。
5. BladeX团队可能会按照官方制定的答疑规则为您进行答疑,但BladeX团队没有为根据本协议许可的产品提供技术支持的义务或责任。
六、 æƒåˆ©å’Œæ‰€æœ‰æƒçš„保留:
BladeX团队保留所有未在本协议中明确授予您的所有权利。BladeX团队保留随时更新本协议的权利,并只需公示于对应产品项目的LICENSE文件,无需征得您的事先同意且无需另行通知,更新后的内容应于公示即时生效。您可以随时访问产品地址并查阅最新版许可条款,在更新生效后您继续使用本产品则被视作您已接受了新的条款。
七、 åè®®ç»ˆæ­¢
1. æ‚¨ä¸€æ—¦å¼€å§‹å¤åˆ¶ã€ä¸‹è½½ã€å®‰è£…或者使用本产品,即被视为完全理解并接受本协议的各项条款,在享有上述条款授予的许可权力同时,也受到相关的约束和限制,本协议许可范围以外的行为,将直接违反本协议并构成侵权。
2. ä¸€æ—¦æ‚¨è¿åæœ¬åè®®çš„æ¡æ¬¾ï¼ŒBladeX团队随时可能终止本协议、收回许可和授权,并要求您承担相应法律和经济责任。
UBCS -编码资源管理系统
Source/UBCS/pom.xml
@@ -108,11 +108,11 @@
            <resource>
                <directory>src/main/resources</directory>
                <excludes>
                   <!-- <exclude>bootstrap.yml</exclude>
                    <exclude>bootstrap.yml</exclude>
                    <exclude>application.yml</exclude>
                    <exclude>application-dev.yml</exclude>
                    <exclude>application-test.yml</exclude>
                    <exclude>application-prop.yml</exclude>-->
                    <exclude>application-prop.yml</exclude>
                </excludes>
            </resource>
            <resource>
Source/UBCS/ubcs-gateway/pom.xml
@@ -74,6 +74,17 @@
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-client</artifactId>
        </dependency>
        <!--<dependency>
            <groupId>org.springblade</groupId>
            <artifactId>blade-starter-log</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springblade</groupId>
                    <artifactId>blade-core-cloud</artifactId>
                </exclusion>
            </exclusions>
        </dependency>-->
    </dependencies>
    <build>
Source/UBCS/ubcs-ops/ubcs-admin/pom.xml
@@ -80,10 +80,10 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <!--<dependency>
            <groupId>org.springframework.security.oauth.boot</groupId>
            <artifactId>spring-security-oauth2-autoconfigure</artifactId>
        </dependency>-->
<!--        <dependency>-->
<!--            <groupId>org.springframework.security.oauth.boot</groupId>-->
<!--            <artifactId>spring-security-oauth2-autoconfigure</artifactId>-->
<!--        </dependency>-->
        <!--Taobao-Sdk-->
        <dependency>
            <groupId>com.taobao</groupId>
@@ -108,4 +108,28 @@
        </plugins>
    </build>
    <!--<build>
        <plugins>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <configuration>
                    <username>${docker.username}</username>
                    <password>${docker.password}</password>
                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
                    <tag>${project.version}</tag>
                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                    <skip>false</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
            </plugin>
        </plugins>
    </build>-->
</project>
Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/CustomUserDetailsService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.vci.ubcs.admin.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
@Service
public class CustomUserDetailsService implements UserDetailsService {
    @Value("${spring.security.user.name:admin}")
    private String USERNAME;
    @Value("${spring.security.user.password:admin}")
    private String PWD;
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // è¿™é‡Œä¸ºäº†ç¤ºä¾‹ï¼Œåˆ›å»ºä¸€ä¸ªç®€å•的用户
        if (USERNAME.equals(username)) {
            return User.builder()
                .username(username)
                .password(PWD) // ä½¿ç”¨{noop}表示明文密码,实际生产环境中应该使用加密密码
                .roles("ADMIN")
                .build();
        } else {
            throw new UsernameNotFoundException("User not found");
        }
    }
}
Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/config/SecurityConfiguration.java
@@ -16,15 +16,22 @@
 */
package com.vci.ubcs.admin.config;
import com.vci.ubcs.admin.security.CustomAuthenticationManager;
import de.codecentric.boot.admin.server.config.AdminServerProperties;
import com.vci.ubcs.admin.security.InternalAuthorizationManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.ReactiveAuthenticationManager;
import org.springframework.security.authorization.ReactiveAuthorizationManager;
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
import org.springframework.security.config.web.server.ServerHttpSecurity;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.web.server.SecurityWebFilterChain;
import org.springframework.security.web.server.authentication.RedirectServerAuthenticationSuccessHandler;
import org.springframework.security.web.server.authorization.AuthorizationContext;
import java.net.URI;
@@ -44,7 +51,12 @@
    }
    @Bean
    public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
    public CustomAuthenticationManager customAuthenticationManager(UserDetailsService userDetailsService) {
        return new CustomAuthenticationManager(userDetailsService);
    }
    @Bean
    public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http, CustomAuthenticationManager customAuthenticationManager) {
        // @formatter:off
        RedirectServerAuthenticationSuccessHandler successHandler = new RedirectServerAuthenticationSuccessHandler();
        successHandler.setLocation(URI.create(contextPath + "/"));
@@ -63,7 +75,8 @@
            .pathMatchers(contextPath + "/actuator", contextPath + "/actuator/**").access(new InternalAuthorizationManager())
            .anyExchange().authenticated().and()
            .formLogin().loginPage(contextPath + "/login")
            .authenticationSuccessHandler(successHandler).and()
            .authenticationSuccessHandler(successHandler)
            .authenticationManager(customAuthenticationManager).and()
            .logout().logoutUrl(contextPath + "/logout").and()
            .httpBasic().disable()
            .csrf().disable()
Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/security/CustomAuthenticationManager.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
package com.vci.ubcs.admin.security;
import org.springframework.security.authentication.ReactiveAuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import reactor.core.publisher.Mono;
public class CustomAuthenticationManager implements ReactiveAuthenticationManager {
    private final UserDetailsService userDetailsService;
    public CustomAuthenticationManager(UserDetailsService userDetailsService) {
        this.userDetailsService = userDetailsService;
    }
    @Override
    public Mono<Authentication> authenticate(Authentication authentication) {
        String username = authentication.getName();
        String password = authentication.getCredentials().toString();
        UserDetails userDetails = userDetailsService.loadUserByUsername(username);
        if (userDetails.getPassword().equals(password)) {
            return Mono.just(new UsernamePasswordAuthenticationToken(userDetails, password, userDetails.getAuthorities()));
        } else {
            return Mono.empty();
        }
    }
}
Source/UBCS/ubcs-ops/ubcs-admin/src/main/java/com/vci/ubcs/admin/security/InternalAuthorizationManager.java
@@ -16,6 +16,7 @@
 */
package com.vci.ubcs.admin.security;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.launch.utils.INetUtil;
import org.springframework.http.HttpHeaders;
import org.springframework.http.server.reactive.ServerHttpRequest;
@@ -34,6 +35,7 @@
 *
 * @author L.cm
 */
@Slf4j
public class InternalAuthorizationManager implements ReactiveAuthorizationManager<AuthorizationContext> {
    private static final String HEADER_X_FORWARDED_FOR = "X-Forwarded-For";
@@ -65,6 +67,16 @@
        if (!headers.containsKey(HEADER_X_FORWARDED_FOR)) {
            return true;
        }
        log.error("===========1========="+context.toString());
        log.error("===========2========="+request.getHeaders());
        log.error("===========3========="+Optional.of(request)
            .map(ServerHttpRequest::getRemoteAddress)
            .map(InetSocketAddress::getAddress)
            .map(INetUtil::isInternalIp)
            .orElse(false));
        log.error("===========4========="+request.getRemoteAddress());
        return Optional.of(request)
            .map(ServerHttpRequest::getRemoteAddress)
            .map(InetSocketAddress::getAddress)
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/DockingSystemConfig.java
@@ -175,6 +175,12 @@
    @ApiModelProperty(value = "返回值类型")
    private String returnType;
    /**
     * å†…容类型
     */
    @ApiModelProperty(value = "内容类型")
    private String contentType;
    /**
     * è¿”回值类型显示文本
Source/UBCS/ubcs-service-api/ubcs-deploy-api/pom.xml
@@ -10,6 +10,8 @@
    <modelVersion>4.0.0</modelVersion>
    <artifactId>ubcs-deploy-api</artifactId>
    <name>${project.artifactId}</name>
    <version>${bladex.project.version}</version>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/HttpUtils.java
@@ -1,7 +1,5 @@
package com.vci.ubcs.starter.util;
import com.alibaba.fastjson.JSON;
import org.springblade.core.tool.utils.WebUtil;
import org.springframework.http.*;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
@@ -69,7 +67,19 @@
        return request(url, params, headers, HttpMethod.POST);
    }
    /**
    /**
     * post请求 TODO: 2024-02-25改,为了满足根据Content-type的类型来发请求,并且param中的json是最后的时候发送请求再转
     *
     * @param url
     * @param params  è¯·æ±‚参数
     * @param headers è¯·æ±‚头
     * @return
     */
    public static String postByMediaType(String url, MultiValueMap<String, Object> params, MultiValueMap<String, String> headers,MediaType mediaType) {
        return request(url, params, headers, HttpMethod.POST,mediaType);
    }
    /**
     * put请求
     *
     * @param url
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java
@@ -9,6 +9,7 @@
import com.vci.ubcs.code.dto.CodeDeleteBatchDTO;
import com.vci.ubcs.code.dto.CodeOrderDTO;
import com.vci.ubcs.code.dto.datapush.BaseModelDTO;
import com.vci.ubcs.code.entity.CodeSynonym;
import com.vci.ubcs.code.vo.CodeKeyAttrRepeatVO;
import com.vci.ubcs.code.vo.pagemodel.UITableFieldVO;
import com.vci.ubcs.code.vo.pagemodel.*;
@@ -84,6 +85,7 @@
     *
     * @param value        å½“前的值
     * @param keyRuleVO    å…³é”®å±žæ€§çš„æŽ§åˆ¶è§„则,可以为空
     * @param codeSynonymMaps è¿‘义词查询规则
     * @param attrId       å±žæ€§çš„编号
     * @param trim         æ˜¯å¦åŽ»é™¤ç©ºæ ¼
     * @param ignoreCase   æ˜¯å¦ä¸åŒºåˆ†å¤§å°å†™
@@ -91,19 +93,17 @@
     * @param trimAll      æ˜¯å¦å¿½ç•¥å…¨éƒ¨ç©ºæ ¼
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     */
    void wrapperKeyAttrConditionMap(String value, CodeKeyAttrRepeatVO keyRuleVO, String attrId,
                               boolean trim, boolean ignoreCase, boolean ignoreWidth,
                               boolean trimAll, Map<String, String> conditionMap);
    void wrapperKeyAttrConditionMap(String value, CodeKeyAttrRepeatVO keyRuleVO, List<CodeSynonym> codeSynonymMaps, String attrId,
                                    boolean trim, boolean ignoreCase, boolean ignoreWidth,
                                    boolean trimAll, Map<String, String> conditionMap);
    /**
     * å°è£…近义词查询规则属性的查询语句
     * @param value å½“前的值
     * @param keyRuleVO å±žæ€§çš„编号
     * @param attrId
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     * è¿‘义词查询规则转换
     * @param codeSynonymMaps
     * @param value
     * @return
     */
    void wrapperSynonymAttrConditionMap(String value, CodeKeyAttrRepeatVO keyRuleVO, String attrId,
                                        Map<String, String> conditionMap);
    String getValueToSynony(/*近义词查询规则*/List<CodeSynonym> codeSynonymMaps,String value);
    /**
     * åˆå§‹åŒ–业务类型
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java
@@ -59,6 +59,7 @@
import org.springblade.core.tool.utils.Func;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -95,6 +96,7 @@
@Service
@Slf4j
public class CodeDuckingSyncServiceImpl implements ICodeDuckingSyncService {
    @Value("${dataSyncPush.dataParamName:xmlData}")
    public String DATA_PARAM_NAME;
    @Value("${dataSyncPush.dataId:itemid}")
@@ -146,21 +148,28 @@
    @Autowired
    private ICodeClassifyValueService codeClassifyValueService;
    @Autowired(required = false)
    private AttributeMapConfig attributeMapConfig;
    /***
     * resdis缓存服务
     */
    @Resource
    private BladeRedis bladeRedis;
    @Resource
    private IDockingSysIntParamService dockingSysIntParamService;
    @Resource
    private IDockingSysIntHeaderService dockingSysIntHeaderService;
    @Autowired(required = false)
    private MdmSearchItemCodeProvider mdmSearchItemCodeProvider;
    @Autowired
    HttpServletRequest request;
    @Override
    public void DockingDataSyncScheduing() {
@@ -222,6 +231,7 @@
        });
        return  R.success("手动推送完成,请核对是否推送成功");
    }
    private SearchItemDataVO initData(String status,String itemCode,String mmCode){
        SearchItemDataVO searchItemDataVO=new SearchItemDataVO();
        searchItemDataVO.setLastchangedon(new Date());
@@ -258,6 +268,7 @@
        return request;
    }
    /***
     * åŒæ­¥åž‹å·ä»£å·
     */
@@ -574,6 +585,7 @@
        }
        return codeOrderSecDTOList;
    }
    /***
     * è¯»å–属性映射配置信息
     * @param systemId
@@ -698,7 +710,8 @@
            throw new   Throwable("组织数据映射值失败");
        }
    }
 private void changeObjectToMap(SearchItemUpperCaseDataVO searchItemDataVO, String code, BladeUser user,String operation,List<ApplyDataVO> object){
    private void changeObjectToMap(SearchItemUpperCaseDataVO searchItemDataVO, String code, BladeUser user,String operation,List<ApplyDataVO> object){
     ApplyDataVO applyDataVO=new ApplyDataVO();
     List<ProppertyVO> propList=new ArrayList<>();
     //String status= searchItemDataVO.getStatus();//数据状态 å­—符型,枚举值;制单:0;审批中:1;通过:2;驳回:3;
@@ -731,13 +744,15 @@
     applyDataVO.setProp(propList);
     object.add(applyDataVO);
 }
  private void initProperty(String key,String text,String value,List<ProppertyVO> propList){
     private void initProperty(String key,String text,String value,List<ProppertyVO> propList){
    ProppertyVO vo=new ProppertyVO();
      vo.setKey(key);
      vo.setText(StringUtils.isBlank(text)?"":text);
      vo.setValue(StringUtils.isBlank(value)?"":value);
      propList.add(vo);
  }
    /***
     * æŸ¥è¯¢redis中数据,对比后插入dockingtask
     * @param type
@@ -863,7 +878,7 @@
        for (DockingTask dockingTask:dockingTaskList){
            //每个task一个事务,开启
            String paramString="";
            String sendString="";
            Object sendString="";
            String backString="";
            //查询系统接口信息,ip method,dataType
            String systeminfooid = dockingTask.getSysInfoOid();//sysininfo çš„oid
@@ -897,8 +912,9 @@
                DockingSystemConfig dockingSystemConfig = dockingSystemConfigService.getById(systeminfooid);
                String paramType = dockingSystemConfig.getParamType();//xml/json
                if(paramType.equals(DATATYPE_JSON)){
                    Object object = JSONObject.toJSON(jsonRootDataDTO);
                    sendString = object.toString();
                    // Object object = JSONObject.toJSON(jsonRootDataDTO);
                    // sendString = object.toString();
                    sendString = jsonRootDataDTO;
                }else{
                    //组织返回接口信息
                    XStream xStream = new XStream(new DomDriver());
@@ -915,6 +931,7 @@
            }
        }
    }
    /***
     * å‘送编码主数据
     */
@@ -923,7 +940,7 @@
        for (DockingTask dockingTask:dockingTaskS){
            //每个task一个事务,开启
            String paramString="";
            String sendString="";
            String sendObject="";
            String backString="";
            try {
                //查询系统接口信息,ip method,dataType
@@ -997,34 +1014,35 @@
                String paramType = dockingSystemConfig.getParamType();//xml/json
                if (paramType.equals(DATATYPE_JSON)) {
                    Object object = JSONObject.toJSON(nodeJosnDTO);
                    sendString = object.toString();
                    sendObject = object.toString();
                } else {
                    //组织返回接口信息
                    XStream xStream = new XStream(new DomDriver());
                    xStream.processAnnotations(NodedataDTO.class);
                    xStream.autodetectAnnotations(true);
                    sendString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO);
                    sendObject = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO);
                }
                //调用接口
                callInterface(sendString,dockingSystemConfig, dockingTask,"pushData");
                callInterface(sendObject,dockingSystemConfig, dockingTask,"pushData");
            }catch (Throwable e){
                e.printStackTrace();
            }finally {
            }
        }
    }
    /***
     * è°ƒç”¨æŽ¥å£
     * @param sendString
     * è°ƒç”¨æŽ¥å£ï¼Œä¼ å‚为JSON时传object类型,Content-Type改为界面配置的
     * @param sendObject
     * @param dockingSystemConfig
     * @param dockingTask
     * @throws Throwable
     */
    private void callInterface(String  sendString , DockingSystemConfig dockingSystemConfig,DockingTask dockingTask,String operation) throws  Throwable{
    private void callInterface(Object sendObject, DockingSystemConfig dockingSystemConfig,DockingTask dockingTask,String operation) throws  Throwable{
        String paramString = "";
        String backString = "";
        String msg="";
        String sendString = dockingSystemConfig.getContentType().equals(DATATYPE_JSON) ? JSONObject.toJSON(sendObject).toString():sendObject.toString();
        String msg= "" ;
        String url = dockingSystemConfig.getRequestUrl();//url
        List<ResultNodeObjectDTO> resultNodeObjectDTOS =new ArrayList<>();
        try {
@@ -1055,17 +1073,17 @@
                    paramString = sendurl;
                    backString = HttpUtils.get(sendurl);
                } else if (requestmethod.equals(URLTYPE_POST)) {//POST请求
                    MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
                    MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
                    for (DockingSysIntParam dockingSysIntParam : dockingSysIntParamList) {
                        params.add(dockingSysIntParam.getParamKey(), dockingSysIntParam.getParamValue());
                    }
                    params.add(DATA_PARAM_NAME,sendString);
                    params.add(DATA_PARAM_NAME,sendObject);
                    paramString = params.toString();
                    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
                    for (DockingSysIntHeader dockingSysIntHeader : dockingSysIntHeaderList) {
                        headers.add(dockingSysIntHeader.getHeaderKey(), dockingSysIntHeader.getHeaderValue());
                    }
                    backString = HttpUtils.post(url, params, headers);
                    backString = HttpUtils.postByMediaType(url, params, headers,new MediaType(dockingSystemConfig.getContentType()));
                }
                if(backString.startsWith("\"")){
                    backString=backString.substring(backString.indexOf("\"")+1);
@@ -1163,6 +1181,160 @@
            }
        }
    }
    /**
     * è°ƒç”¨æŽ¥å£ï¼Œä¼ å‚为JSON时传object类型
     * @param sendObject
     * @param dockingSystemConfig
     * @param dockingTask
     * @param operation
     * @throws Throwable
     */
    private void callInterfaceByContentType(Object sendObject, DockingSystemConfig dockingSystemConfig,DockingTask dockingTask,String operation,String sendType) throws  Throwable{
        String paramString = "";
        String sendString = sendType.equals(DATATYPE_JSON) ? JSONObject.toJSON(sendObject).toString():sendObject.toString();
        String backString = "";
        String msg="";
        String url = dockingSystemConfig.getRequestUrl();//url
        List<ResultNodeObjectDTO> resultNodeObjectDTOS =new ArrayList<>();
        try {
            boolean usedFlag= dockingSystemConfig.getUsedFlag().equals("true")?true:false;
            if(!usedFlag){
                throw  new Throwable("接口已经停用!");
            }
            String type = dockingSystemConfig.getInterfaceType().toLowerCase(Locale.ROOT);//get/post/webserver/corba
            String paramType = dockingSystemConfig.getParamType();//xml/json
            String returnType = dockingSystemConfig.getReturnType();//xml/json
            String requestmethod= dockingSystemConfig.getRequestMethod();
            String interfaceFunction = dockingSystemConfig.getInterfaceFunction();//主要是webservice的方法名
            String namespace = dockingSystemConfig.getNamespace();//namespace
            String soapaction = dockingSystemConfig.getSoapAction();//soapaction
            String targName = dockingSystemConfig.getTargetName();//targName
            String cxfaxis = dockingSystemConfig.getCxfAxis();//webservice是cxf/axis
            //查询param
            List<DockingSysIntParam> dockingSysIntParamList = dockingSysIntParamService.list(Wrappers.<DockingSysIntParam>query().lambda().eq(DockingSysIntParam::getInfoOid,dockingSystemConfig.getOid()));
            //查询header
            List<DockingSysIntHeader> dockingSysIntHeaderList = dockingSysIntHeaderService.list(Wrappers.<DockingSysIntHeader>query().lambda().eq(DockingSysIntHeader::getInfoOid,dockingSystemConfig.getOid()));
            if(type.equals(URLTYPE_HTTP)) {
                if (requestmethod.equals(URLTYPE_GET)) {//GET请求
                    String sendurl = url + "?" + DATA_PARAM_NAME + "=" + sendString;
                    //拼接param
                    for (DockingSysIntParam dockingSysIntParam : dockingSysIntParamList) {
                        sendurl = sendurl + "&" + dockingSysIntParam.getParamKey() + "=" + dockingSysIntParam.getParamValue();
                    }
                    paramString = sendurl;
                    backString = HttpUtils.get(sendurl);
                } else if (requestmethod.equals(URLTYPE_POST)) {//POST请求
                    MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
                    for (DockingSysIntParam dockingSysIntParam : dockingSysIntParamList) {
                        params.add(dockingSysIntParam.getParamKey(), dockingSysIntParam.getParamValue());
                    }
                    params.add(DATA_PARAM_NAME,sendObject);
                    paramString = params.toString();
                    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
                    for (DockingSysIntHeader dockingSysIntHeader : dockingSysIntHeaderList) {
                        headers.add(dockingSysIntHeader.getHeaderKey(), dockingSysIntHeader.getHeaderValue());
                    }
                    // TODO: 2024-02-25改,为了满足HR以及其他情况下根据Content-type的类型来发请求,并且param中的json是最后的时候发送请求再转
                    backString = HttpUtils.postByMediaType(url, params, headers, MediaType.APPLICATION_FORM_URLENCODED);
                }
                if(backString.startsWith("\"")){
                    backString=backString.substring(backString.indexOf("\"")+1);
                }
                if(backString.endsWith("\"")){
                    backString=backString.substring(0,backString.lastIndexOf("\""));
                }
                if(backString.contains("\n")){
                    String res="\n";
                    backString=  backString.replaceAll(res,"");
                }
                if(backString.contains("\\")){
                    String res="\\\\\"";
                    backString=  backString.replaceAll(res,"\"").trim();
                }
            }else if (type.equals(URLTYPE_WEBSERVICE)) {//webserver请求
                MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
                for (DockingSysIntParam dockingSysIntParam : dockingSysIntParamList) {
                    params.add(dockingSysIntParam.getParamKey(), dockingSysIntParam.getParamValue());
                }
                paramString = sendString;
                MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
                for (DockingSysIntHeader dockingSysIntHeader : dockingSysIntHeaderList) {
                    headers.add(dockingSysIntHeader.getHeaderKey(), dockingSysIntHeader.getHeaderValue());
                }
                backString = WsErpClientUtil.sendMsg(url, namespace, soapaction, interfaceFunction, targName, sendString, 10000);
            } else {//corba接口
                //paramString=sendString;
                //  backString = jacorbClient.getBOFactoryService().sendCode(sendString);
            }
            ResultJsonDTO resultJsonDTO = new ResultJsonDTO();
            if(returnType.equals(DATATYPE_JSON)){
                resultJsonDTO =JSONObject.toJavaObject(JSONObject.parseObject(backString), ResultJsonDTO.class);
            }else {
                //组织返回接口信息
                XStream xStream = new XStream(new DomDriver());
                xStream.processAnnotations(ResultNodeDataDTO.class);
                xStream.autodetectAnnotations(true);
                ResultNodeDataDTO resultNodeDataDTO = (ResultNodeDataDTO) xStream.fromXML(backString);
                resultJsonDTO.setData(resultNodeDataDTO);
            }
            ResultNodeDataDTO resultNodeDataDTO=resultJsonDTO.getData();
            resultNodeObjectDTOS=resultNodeDataDTO.getObject();
        }catch (Throwable e){
            msg="调用接口失败:"+e.getMessage();
            e.printStackTrace();
            log.error("调用接口失败:"+e);
            //   throw  new Throwable("调用接口失败:"+e);
            ResultNodeObjectDTO   resultNodeObjectDTO=new ResultNodeObjectDTO();
            resultNodeObjectDTO.setErroid("1");
            resultNodeObjectDTO.setMsg(msg);
            resultNodeObjectDTO.setCode(dockingSystemConfig.getPushType().equalsIgnoreCase("2")?dockingTask.getClassifyId():dockingTask.getId());
            resultNodeObjectDTO.setItemid(dockingTask.getBtmOid());
            resultNodeObjectDTOS.add(resultNodeObjectDTO);
        }finally {
            boolean isSend = false;
            for (ResultNodeObjectDTO resultNodeObjectDTO:resultNodeObjectDTOS){
                String erroid = resultNodeObjectDTO.getErroid();
                msg = resultNodeObjectDTO.getMsg();
                if("0".equals(erroid)){
                    isSend = true;
                }else if("1".equals(erroid)){
                    isSend=false;
                }else{
                    isSend=false;
                }
                DockingLog dockingLogeDO = new DockingLog();
                String oid=VciBaseUtil.getPk();
                dockingLogeDO.setOid(oid);
                dockingLogeDO.setSystemCode(dockingTask.getSystemCode());
                dockingLogeDO.setSystemName(dockingTask.getSystemName());
                dockingLogeDO.setSystemOid(dockingTask.getSystemOid());
                dockingLogeDO.setClassifyOid(dockingTask.getClassifyOid());
                dockingLogeDO.setClassifyId(dockingTask.getClassifyId());
                dockingLogeDO.setClassifyName(dockingTask.getClassifyName());
                dockingLogeDO.setCreateTime(new Date());
                dockingLogeDO.setId(dockingTask.getId());
                dockingLogeDO.setUniqueCode(dockingTask.getUniqueCode());
                dockingLogeDO.setParamString(paramString);
                dockingLogeDO.setReturnString(backString);
                dockingLogeDO.setInterfaceStatus(isSend?"true":"false");
                dockingLogeDO.setType(operation);
                dockingLogeDO.setMsg(msg);
                log.error("集成推送数据,systemcode:"+dockingTask.getSystemCode()+",systemname:"+dockingTask.getSystemName()+",url:"+url+",param:"+paramString+",e:"+msg);
                dockingLogeService.save(dockingLogeDO);
            }
            //全都接收成功的情况下,修改dockingtask sendflag为已发送
            if(isSend) {
                dockingTask.setSendFlag(MdmDuckingConstant.SEND_FLAG_TRUE);
                dockingTask.setLastModifyTime(new Date());
                dockingTaskService.updateById(dockingTask);
            }
        }
    }
    /***
     * æŸ¥è¯¢éœ€è¦é›†æˆçš„业务数据任务
     */
@@ -1199,6 +1371,7 @@
        List<DockingTask> dockingTaskDOS = dockingTaskService.list(queryWrapper);
        sendpushClsfForService(dockingTaskDOS);
    }
    public void initSysadmin(){
        SessionInfo sessionInfo = new SessionInfo();
        sessionInfo.setUserId("sysAdmin");
@@ -1208,6 +1381,7 @@
        sessionInfo.setUserSecret(UserSecretEnum.PRIVACY.getValue()+"");
        WebUtil.setSessionInfo(sessionInfo);
    }
    /**
     * dockingdata根据oid修改sendflag
     * @param oid
@@ -1223,5 +1397,6 @@
        }
        return u;
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -177,6 +177,11 @@
    private MdmProductCodeService productCodeService;
    /**
     * è¿‘义词规则查询服务
     */
    @Autowired ICodeSynonymService codeSynonymService;
    /**
     * å¯è¾“可选的服务
     */
    @Resource
@@ -358,7 +363,6 @@
     */
    @Autowired
    private SaveLogUtil saveLogUtil;
    /**
     * ä½¿ç”¨åˆ†ç±»çš„主键获取可以使用的模板对象
@@ -755,27 +759,36 @@
        //注意的是keyRuleVO可能为空,表示不使用规则控制
        //获取所有的关键属性
        Map<String, CodeClassifyTemplateAttrVO> ketAttrMap = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getKeyAttrFlag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
        // TODO:2024-02-01 å…ˆèŽ·å–é…ç½®äº†è¿‘ä¹‰è¯æŸ¥è¯¢è§„åˆ™çš„å±žæ€§ï¼Œä¸åŒäºŽå…³é”®å±žæ€§ï¼Œè®¾ç½®äº†è¿‘ä¹‰è¯æŸ¥è¯¢è§„åˆ™çš„å±žæ€§å¯èƒ½æ˜¯å¤šæ¡ä¸åŒçš„è¿‘ä¹‰è¯æŸ¥è¯¢è§„åˆ™
        Map<String, CodeClassifyTemplateAttrVO> sysonymAttrMaps = templateVO.getAttributes().stream().filter(item -> Func.isNotBlank(item.getSysonymRuleOids())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
        // èŽ·å–æ˜¯å¦æœ‰é…ç½®è¿‘ä¹‰è¯æŸ¥è¯¢è§„åˆ™å±žæ€§
        Map<String, List<CodeSynonym>> codeSynonymMaps = new HashMap<>();
        if(!sysonymAttrMaps.isEmpty()){
            // æŸ¥è¯¢è¿‘义词规则,存储方式key:属性id,value近义词查询规则列表
            codeSynonymMaps = codeSynonymService.getCodeSynonymByOids(sysonymAttrMaps);
        }
        Map<String, String> conditionMap = new HashMap<>();
        boolean trimAll = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag());
        //全部去空的优先级大于去空
        boolean trim = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag());
        boolean ignoreCase = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag());
        boolean ignoreWidth = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag());
        Map<String, List<CodeSynonym>> finalCodeSynonymMaps = codeSynonymMaps;
        ketAttrMap.forEach((attrId, attrVO) -> {
            String value = getValueFromOrderDTO(orderDTO, attrId);
            if (value == null) {
                value = "";
            }
            wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
            wrapperKeyAttrConditionMap(value, keyRuleVO, finalCodeSynonymMaps.get(attrId), attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
        });
        //没有限制分类,但是一个模板只可能在一个业务类型里面,所以直接查询这个业务类型即可
        if (!CollectionUtils.isEmpty(conditionMap)) {
            // TODO: åŒä¸€ä¸ªåº“判重不需要区分分类oid
            // conditionMap.put("CODETEMPLATEOID","'" + orderDTO.getTemplateOid() + "'");
//            final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " t where 1 = 1 "};
            // final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " t where 1 = 1 "};
            R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getTopClassifyVO().getBtmTypeId()));
//                String referTable = VciBaseUtil.getTableName(referVO.getReferType());
            // String referTable = VciBaseUtil.getTableName(referVO.getReferType());
            if (!listR.isSuccess() || listR.getData().size() == 0) {
                throw new VciBaseException("传入业务类型未查询到相应表单,请检查!");
            }
@@ -800,7 +813,7 @@
            if (Func.isNotEmpty(isParticipateCheckOids)) {
                sql[0] += " and codeclsfid not in(" + isParticipateCheckOids + ")";
            }
//            if (boService.queryCountBySql(sql[0], new HashMap<>()) > 0) {
            // if (boService.queryCountBySql(sql[0], new HashMap<>()) > 0) {
            List<String> repeatData = commonsMapper.selectList(sql[0]);
            if (!repeatData.isEmpty()) {
                String ruleInfoMsg = keyRuleVO == null ? "" : "查询规则:去除空格--{0},忽略大小写--{1},忽略全半角--{2},忽略全部空格--{3}";
@@ -825,18 +838,27 @@
        //注意的是keyRuleVO可能为空,表示不使用规则控制
        //获取所有的关键属性
        Map<String, CodeClassifyTemplateAttrVO> ketAttrMap = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getKeyAttrFlag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
        // TODO:2024-02-01 å…ˆèŽ·å–é…ç½®äº†è¿‘ä¹‰è¯æŸ¥è¯¢è§„åˆ™çš„å±žæ€§ï¼Œä¸åŒäºŽå…³é”®å±žæ€§ï¼Œè®¾ç½®äº†è¿‘ä¹‰è¯æŸ¥è¯¢è§„åˆ™çš„å±žæ€§å¯èƒ½æ˜¯å¤šæ¡ä¸åŒçš„è¿‘ä¹‰è¯æŸ¥è¯¢è§„åˆ™
        Map<String, CodeClassifyTemplateAttrVO> sysonymAttrMaps = templateVO.getAttributes().stream().filter(item -> Func.isNotBlank(item.getSysonymRuleOids())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
        // èŽ·å–æ˜¯å¦æœ‰é…ç½®è¿‘ä¹‰è¯æŸ¥è¯¢è§„åˆ™å±žæ€§
        Map<String, List<CodeSynonym>> codeSynonymMaps = new HashMap<>();
        if(!sysonymAttrMaps.isEmpty()){
            // æŸ¥è¯¢è¿‘义词规则,存储方式key:属性id,value近义词查询规则列表
            codeSynonymMaps = codeSynonymService.getCodeSynonymByOids(sysonymAttrMaps);
        }
        Map<String, String> conditionMap = new HashMap<>();
        boolean trimAll = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag());
        //全部去空的优先级大于去空
        boolean trim = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag());
        boolean ignoreCase = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag());
        boolean ignoreWidth = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag());
        Map<String, List<CodeSynonym>> finalCodeSynonymMaps = codeSynonymMaps;
        ketAttrMap.forEach((attrId, attrVO) -> {
            String value = getValueFromOrderDTO(orderDTO, attrId);
            if (value == null) {
                value = "";
            }
            wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
            wrapperKeyAttrConditionMap(value, keyRuleVO, finalCodeSynonymMaps.get(attrId), attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
        });
        //没有限制分类,但是一个模板只可能在一个业务类型里面,所以直接查询这个业务类型即可
@@ -927,7 +949,7 @@
        }
        //是否系列
        if (!codeBZApplyDTO.isSeries()) {
            boolean isSeriesValue = codeBZApplyDTO.getData().get(isSeries).equals("true") ? true : false;
            boolean isSeriesValue = Func.toBoolean(codeBZApplyDTO.getData().get(isSeries));
            codeBZApplyDTO.setSeries(isSeriesValue);
        }
        //原标准号
@@ -947,7 +969,7 @@
        }
        //是否变更系列
        if (!codeBZApplyDTO.isEditSeries()) {
            boolean isEditSeriesValue = codeBZApplyDTO.getData().get(isEditSeries).equals("true") ? true : false;
            boolean isEditSeriesValue = Func.toBoolean(codeBZApplyDTO.getData().get(isEditSeries));
            codeBZApplyDTO.setEditSeries(isEditSeriesValue);
        }
        VciBaseUtil.alertNotNull(codeBZApplyDTO.getOperationType(), "操作类型",
@@ -965,7 +987,7 @@
        } else if (codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_DISABLE.getValue())) {//作废
            code = amendmentDataBZ(codeBZApplyDTO, authUser);
            createChangeOder(code, codeBZApplyDTO, authUser);
        } else if (codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_AMENDMENT.getValue())) {//备查
        } else if (codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_FOR_REFERENCE.getValue())) {//备查
            code = amendmentDataBZ(codeBZApplyDTO, authUser);
            createChangeOder(code, codeBZApplyDTO, authUser);
        }
@@ -1235,14 +1257,18 @@
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     */
    @Override
    public void wrapperKeyAttrConditionMap(String value, CodeKeyAttrRepeatVO keyRuleVO, String attrId,
    public void wrapperKeyAttrConditionMap(String value, CodeKeyAttrRepeatVO keyRuleVO,
                                           List<CodeSynonym> codeSynonymMaps, String attrId,
                                           boolean trim, boolean ignoreCase, boolean ignoreWidth,
                                           boolean trimAll, Map<String, String> conditionMap) {
        boolean ignoreSpace = trim || trimAll;
        if (StringUtils.isBlank(value)) {
            //为空的时候,不能用QueryOperation.ISNULL,平台不知道啥时候不处理这种了
            //值为空的时候,不能用QueryOperation.ISNULL,平台不知道啥时候不处理这种了
            conditionMap.put("t." + attrId, QueryOptionConstant.ISNULL);
        } else {
            //近义词查询规则valu值转换
            value = this.getValueToSynony(codeSynonymMaps, value);
            if (keyRuleVO != null) {
                String queryKey = "";
                String queryValue = "";
@@ -1278,7 +1304,7 @@
                conditionMap.put(queryKey, queryValue);
            } else {
                if (StringUtils.isNotBlank(value)) {
                    //为空的时候不代表不校验,只是不去除相关的信息
                    //关键属性查重规则为空的时候不代表不校验,只是不去除相关的信息
                    conditionMap.put("nvl(" + "t." + attrId + ",'/')", "'" + SpecialCharacterConverter.escapeSpecialCharacters(value) + "'");
                } else {
                    conditionMap.put("t." + attrId, QueryOptionConstant.ISNULL);
@@ -1288,17 +1314,20 @@
    }
    /**
     * å°è£…近义词查询规则属性的查询语句
     * @param value å½“前的值
     * @param keyRuleVO å±žæ€§çš„编号
     * @param attrId
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     * è¿‘义词查询规则转换
     * @param codeSynonymMaps
     * @param value
     * @return
     */
    @Override
    public void wrapperSynonymAttrConditionMap(String value, CodeKeyAttrRepeatVO keyRuleVO, String attrId, Map<String, String> conditionMap) {
        // map构造思路:1、先完成正向替换sql值
        // 2、再完成反向替换sql值
    public String getValueToSynony(/*近义词查询规则*/List<CodeSynonym> codeSynonymMaps,String value){
        // èŽ·å–å¹¶åˆ¤æ–­æ˜¯å¦é…ç½®äº†è¿‘ä¹‰è¯æŸ¥è¯¢è§„åˆ™
        // TODO:近义词替换成源值(源值是正确的值,近义词是相当于输错笔误的字符)
        if(!codeSynonymMaps.isEmpty()){
            for (int i = 0; i < codeSynonymMaps.size(); i++) {
                value = value.replace(codeSynonymMaps.get(i).getSynonymValue(),codeSynonymMaps.get(i).getSourceValue());
            }
        }
        return value;
    }
    /**
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -165,6 +165,9 @@
    @Autowired
    private ICodeKeyAttrRepeatService keyRuleService;
    /**
     * è¿‘义词规则查询服务
     */
    @Autowired ICodeSynonymService codeSynonymService;
    /**
@@ -3095,18 +3098,27 @@
        //注意的是keyRuleVO可能为空,表示不使用规则控制
        //获取所有的关键属性
        Map<String, CodeClassifyTemplateAttrVO> ketAttrMap = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getKeyAttrFlag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
        // TODO:2024-02-01 å…ˆèŽ·å–é…ç½®äº†è¿‘ä¹‰è¯æŸ¥è¯¢è§„åˆ™çš„å±žæ€§ï¼Œä¸åŒäºŽå…³é”®å±žæ€§ï¼Œè®¾ç½®äº†è¿‘ä¹‰è¯æŸ¥è¯¢è§„åˆ™çš„å±žæ€§å¯èƒ½æ˜¯å¤šæ¡ä¸åŒçš„è¿‘ä¹‰è¯æŸ¥è¯¢è§„åˆ™
        Map<String, CodeClassifyTemplateAttrVO> sysonymAttrMaps = templateVO.getAttributes().stream().filter(item -> Func.isNotBlank(item.getSysonymRuleOids())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
        // èŽ·å–æ˜¯å¦æœ‰é…ç½®è¿‘ä¹‰è¯æŸ¥è¯¢è§„åˆ™å±žæ€§
        Map<String, List<CodeSynonym>> codeSynonymMaps = new HashMap<>();
        if(!sysonymAttrMaps.isEmpty()){
            // æŸ¥è¯¢è¿‘义词规则,存储方式key:属性id,value近义词查询规则列表
            codeSynonymMaps = codeSynonymService.getCodeSynonymByOids(sysonymAttrMaps);
        }
        Map<String, String> conditionMap = new HashMap<>();
        boolean trimAll = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag());
        //全部去空的优先级大于去空
        boolean trim = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag());
        boolean ignoreCase = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag());
        boolean ignoreWidth = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag());
        Map<String, List<CodeSynonym>> finalCodeSynonymMaps = codeSynonymMaps;
        ketAttrMap.forEach((attrId, attrVO) -> {
            String value = getValueFromOrderDTO(orderDTO, attrId);
            if (value == null) {
                value = "";
            }
            engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
            engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, finalCodeSynonymMaps.get(attrId), attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
        });
        //没有限制分类,但是一个模板只可能在一个业务类型里面,所以直接查询这个业务类型即可
@@ -4398,7 +4410,7 @@
        // TODO:2024-02-01 å…ˆèŽ·å–é…ç½®äº†è¿‘ä¹‰è¯æŸ¥è¯¢è§„åˆ™çš„å±žæ€§ï¼Œä¸åŒäºŽå…³é”®å±žæ€§ï¼Œè®¾ç½®äº†è¿‘ä¹‰è¯æŸ¥è¯¢è§„åˆ™çš„å±žæ€§å¯èƒ½æ˜¯å¤šæ¡ä¸åŒçš„è¿‘ä¹‰è¯æŸ¥è¯¢è§„åˆ™
        Map<String, CodeClassifyTemplateAttrVO> sysonymAttrMaps = templateVO.getAttributes().stream().filter(item -> Func.isNotBlank(item.getSysonymRuleOids())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
        // æœ‰é…ç½®è¿‘义词查询规则属性
        // èŽ·å–æ˜¯å¦æœ‰é…ç½®è¿‘ä¹‰è¯æŸ¥è¯¢è§„åˆ™å±žæ€§
        Map<String, List<CodeSynonym>> codeSynonymMaps = new HashMap<>();
        if(!sysonymAttrMaps.isEmpty()){
            // æŸ¥è¯¢è¿‘义词规则,存储方式key:属性id,value近义词查询规则列表
@@ -4417,8 +4429,8 @@
            new String[]{trim?"是":"否",ignoreCase?"是":"否",ignoreWidth?"是":"否",trimAll?"是":"否"}));
        //resultVO.setSelfRepeatRowIndexList(getSelfRepeatRowIndex(keyAttrMap,cboList,keyRuleVO));
        // å…ˆåœ¨è¡¨æ ¼ä¸­æŸ¥è¯¢å…³é”®å±žæ€§é‡å¤çš„列
        getSelfRepeatRowIndex(keyAttrMap,cboList,keyRuleVO,resultVO);
        // å…ˆåœ¨è¡¨æ ¼ä¸­æŸ¥è¯¢å…³é”®å±žæ€§å’Œè¿‘义词转换后重复的列
        getSelfRepeatRowIndex(keyAttrMap,cboList,keyRuleVO,codeSynonymMaps,resultVO);
        // å†åœ¨è¡¨æ ¼ä¸­æŸ¥è¯¢è¿‘义词查询规则的列
        //getSelfRepeatSysnomRowIndex(sysonymAttrMaps,cboList,codeSynonymMaps,resultVO);
@@ -4435,6 +4447,7 @@
        //  ,所以暂时将parallelStream改成了stream,改成了stream之后发现巨慢
        // customForkJoinPool控制并发度
        List<ClientBusinessObject> finalCboList = cboList;
        Map<String, List<CodeSynonym>> finalCodeSynonymMaps = codeSynonymMaps;
        List<ClientBusinessObject> repeatDataMap = (List<ClientBusinessObject>) customForkJoinPool.submit(()->{
            finalCboList.parallelStream().filter(cbo -> {
                //每行都得查询.如果其中出现了错误,我们就直接抛出异常,其余的显示
@@ -4447,9 +4460,7 @@
                    }
                    value= value.replace(REQUIRED_CHAR,SPECIAL_CHAR);
                    // å…³é”®å±žæ€§æŸ¥è¯¢æ¡ä»¶map获取
                    engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
                    // è¿‘义词查询规则条件map获取
                    //engineService.wrapperSynonymAttrConditionMap(value);
                    engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, finalCodeSynonymMaps.get(attrId), attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
                });
                if (!CollectionUtils.isEmpty(keyAttrMap)) {
@@ -4603,14 +4614,14 @@
    }
    /**
     * èŽ·å–å¯¼å…¥çš„å†…å®¹ä¸­å…³é”®å±žæ€§é‡å¤çš„è¡Œå·
     * èŽ·å–å¯¼å…¥çš„å†…å®¹ä¸­å…³é”®å±žæ€§è¿‘ä¹‰è¯è½¬æ¢åŽé‡å¤çš„è¡Œå·
     * @param ketAttrMap å…³é”®å±žæ€§çš„æ˜ å°„
     * @param dataList å¯¼å…¥çš„æ•°æ®
     * @param keyRuleVO å…³é”®å±žæ€§æŽ§åˆ¶è§„则
     * @return é‡å¤çš„行号
     */
    private void getSelfRepeatRowIndex(Map<String/**属性的编号**/, CodeClassifyTemplateAttrVO> ketAttrMap,
                                       List<ClientBusinessObject> dataList,CodeKeyAttrRepeatVO keyRuleVO,CodeImportResultVO resultVO){
                                       List<ClientBusinessObject> dataList,CodeKeyAttrRepeatVO keyRuleVO,/*近义词查询规则*/Map<String,List<CodeSynonym>> codeSynonymMaps, CodeImportResultVO resultVO){
        Set<String> selfRepeatRowIndexList = new CopyOnWriteArraySet<>();
        Map<String,List<String>> keyAttrOkOidTORepeatOidMap=new HashMap<>();
        boolean trimAll =keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag());
@@ -4626,10 +4637,10 @@
            String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
            String oid=cbo.getOid();
            StringBuilder sb = new StringBuilder();
            // å…³é”®å±žæ€§é‡å¤æ ¡éªŒå€¼å¤„理
            for (int i = 0; i < attrVOList.size(); i++) {
                CodeClassifyTemplateAttrVO attrVO = attrVOList.get(i);
                String attrId = attrVO.getId().toLowerCase(Locale.ROOT);
            // TODO: 2024-02-25改造实现近义词查询规则功能;关键属性重复校验值处理
            attrVOList.stream().forEach(item->{
                String attrId = item.getId().toLowerCase(Locale.ROOT);
                String value = cbo.getAttributeValue( attrId);
                if (value == null) {
                    value = "";
@@ -4646,61 +4657,9 @@
                if(ignoreWidth){
                    value = VciBaseUtil.toDBC(value);
                }
                value = mdmEngineService.getValueToSynony(codeSynonymMaps.get(attrId),value);
                sb.append(value).append("${ks}");
            }
            String keyString = sb.toString();
            if(rowIndexKeyStringMap.containsValue(keyString) && StringUtils.isNotBlank(keyString)){
                selfRepeatRowIndexList.add(rowIndex);
                String okOid=okOidKeyStringMap.getOrDefault(keyString,"");
                if(StringUtils.isNotBlank(okOid)){
                    List<String>newOidList=new ArrayList<>();
                    newOidList.add(oid);
                    if(keyAttrOkOidTORepeatOidMap.containsKey(okOid)){
                        List<String> oldOidList = keyAttrOkOidTORepeatOidMap.get(okOid);
                        newOidList.addAll(oldOidList);
                    }
                    keyAttrOkOidTORepeatOidMap.put(okOid,newOidList);
                }
            }else {
                okOidKeyStringMap.put(sb.toString(),oid);
                rowIndexKeyStringMap.put(rowIndex, sb.toString());
            }
        });
        //因为只是关键属性重复,所以我们不能重复的多条选一条来报错
        resultVO.setKeyAttrRepeatRowIndexList(selfRepeatRowIndexList);
        resultVO.setKeyAttrOkOidTORepeatOidMap(keyAttrOkOidTORepeatOidMap);
    }
    /**
     * èŽ·å–è¿‘ä¹‰è¯æŸ¥è¯¢å­˜åœ¨ç›¸åŒçš„è¡Œå·
     * @param sysonymAttr
     * @param dataList
     * @param CodeSynonymMaps
     * @param resultVO
     */
    private void getSelfRepeatSysnomRowIndex(Map<String/**属性的编号**/, CodeClassifyTemplateAttrVO> sysonymAttr,
                                             List<ClientBusinessObject> dataList, Map<String, List<CodeSynonym>> CodeSynonymMaps,CodeImportResultVO resultVO) {
        Set<String> selfRepeatRowIndexList = new CopyOnWriteArraySet<>();
        Map<String,List<String>> keyAttrOkOidTORepeatOidMap=new HashMap<>();
        //必须将属性按照顺序排序好
        List<CodeClassifyTemplateAttrVO> attrVOList = sysonymAttr.values().stream().sorted(((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()))).collect(Collectors.toList());
        Map<String/**行号**/,String/**关键属性的组合内容**/> rowIndexKeyStringMap = new HashMap<>();
        Map<String/**关键属性的组合内容**/,String/**第一个关键属性的数据oid**/> okOidKeyStringMap = new HashMap<>();
        dataList.parallelStream().forEach(cbo-> {
            String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
            String oid = cbo.getOid();
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < attrVOList.size(); i++) {
                CodeClassifyTemplateAttrVO attrVO = attrVOList.get(i);
                String attrId = attrVO.getId().toLowerCase(Locale.ROOT);
                String value = cbo.getAttributeValue(attrId);
                List<CodeSynonym> codeSynonyms = CodeSynonymMaps.get(attrId);
                // å¯¹è¿‘义词查询值进行转换
                value = synonymConversion(codeSynonyms,value);
                // å¦‚æžœcodeSynonyms是多个就需要考虑组合问题
                sb.append(value).append("${sys}");
            }
            });
            String keyString = sb.toString();
            if(rowIndexKeyStringMap.containsValue(keyString) && StringUtils.isNotBlank(keyString)){
                selfRepeatRowIndexList.add(rowIndex);
@@ -4722,23 +4681,6 @@
        //因为只是关键属性重复,所以我们不能重复的多条选一条来报错
        resultVO.setKeyAttrRepeatRowIndexList(selfRepeatRowIndexList);
        resultVO.setKeyAttrOkOidTORepeatOidMap(keyAttrOkOidTORepeatOidMap);
    }
    /**
     * è¿‘义词与源值相互转换
     * @param codeSynonyms
     * @param value
     * @return
     */
    private String synonymConversion(List<CodeSynonym> codeSynonyms,String value){
        // åªæœ‰ä¸€æ¡è¿‘义词查询规则时
        if(codeSynonyms.isEmpty() || codeSynonyms.size() == 1){
            return value.replace(codeSynonyms.get(0).getSourceValue(),codeSynonyms.get(0).getSynonymValue());
        }
        // è¿‘义词规则可能出现的情况是一个源值对应多个近义词,而反查时同样会出现一个近义词对应多个源值
//        codeSynonyms.stream().map()
        return value;
    }
    /**
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/webService/config/VciCxfPublishConfig.java
@@ -42,7 +42,7 @@
    public void autoPushCxf(){
        log.info("开始进行自动发布webService接口");
        Map<String, Object> beansWithAnnotation =   ApplicationContextProvider.getApplicationContext().getBeansWithAnnotation(VciWebservice.class);
        Map<String, Object> beansWithAnnotation = ApplicationContextProvider.getApplicationContext().getBeansWithAnnotation(VciWebservice.class);
        if(!CollectionUtils.isEmpty(beansWithAnnotation)){
            //找这些bean的
            beansWithAnnotation.forEach((beanName,bean)->{
Source/UBCS/ubcs-service/ubcs-deploy/src/main/java/com/vci/ubcs/deploy/service/impl/DeployAppsServiceImpl.java
@@ -17,8 +17,10 @@
import com.vci.ubcs.starter.util.HttpUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.WebUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.client.ServiceInstance;
@@ -30,6 +32,8 @@
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletRequest;
@@ -40,6 +44,8 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -167,18 +173,18 @@
        if(deployAppsVO.getName().isEmpty()){
            throw new ServiceException("缺少必传参数name");
        }
        DeployApps deployApps = deployAppsMapper.selectOne(Wrappers.<DeployApps>query().lambda().eq(DeployApps::getServerName, deployAppsVO.getName()));
        List<DeployApps> deployApps = deployAppsMapper.selectList(Wrappers.<DeployApps>query().lambda().eq(DeployApps::getServerName, deployAppsVO.getName()));
        if(Func.isNotEmpty(deployApps)){
            return deployApps;
            return deployApps.get(0);
        }
        // æœªä»Žåº“中查询到,需要生成服务信息保存默认信息到库中
        DeployApps defaultDeployApps = new DeployApps();
        defaultDeployApps.setLogPath(PARENTPATH + "\\" + deployAppsVO.getName().replace("-","_") + LOGPATH);
        defaultDeployApps.setLogPath(PARENTPATH + deployAppsVO.getName().replace("-","_") + LOGPATH);
        defaultDeployApps.setServerName(deployAppsVO.getName());
        defaultDeployApps.setStartCmd(CmdConfigEnum.START_CMD.getValue() + deployAppsVO.getName());
        defaultDeployApps.setStopCmd(CmdConfigEnum.STOP_CMD.getValue() + deployAppsVO.getName());
        defaultDeployApps.setRestartCmd(CmdConfigEnum.RESTART_CMD.getValue() + deployAppsVO.getName());
        defaultDeployApps.setServerPath(PARENTPATH + "\\" + deployAppsVO.getName().replace("-","_"));
        defaultDeployApps.setServerPath(PARENTPATH + deployAppsVO.getName().replace("-","_"));
        int eft = deployAppsMapper.insert(defaultDeployApps);
        if (!SqlHelper.retBool(eft)) {
            throw new ServiceException("生成默认服务信息到库中时失败!");
@@ -194,8 +200,7 @@
     */
    @Override
    public boolean saveOrUpdateServiceInfo(DeployAppsVO deployAppsVO) throws ServiceException {
        boolean b = this.saveOrUpdate(deployAppsVO);
        return b;
        return this.saveOrUpdate(deployAppsVO);
    }
    /**
@@ -208,6 +213,10 @@
    public boolean addSave(DeployApps deployApps) throws ServiceException {
        if (Func.isBlank(deployApps.getServerName()) || Func.isBlank(deployApps.getServerPath())) {
            throw new ServiceException("必传参数[服务名称,服务存放路径]不能为空");
        }
        List<DeployApps> deployAppsList = deployAppsMapper.selectList(Wrappers.<DeployApps>query().lambda().eq(DeployApps::getServerName, deployApps.getServerName()));
        if (!deployAppsList.isEmpty()) {
            throw new ServiceException("新增服务的服务名重复!");
        }
        return SqlHelper.retBool(deployAppsMapper.insert(deployApps));
    }
@@ -238,12 +247,12 @@
                    String backName = "";
                    String fileType = "file";
                    // æ˜¯åŽ‹ç¼©æ–‡ä»¶,因为只会存在两种情况,文件名是压缩文件,或者文件(.jar类型的文件)
                    // å½“前时间
                    String currentDateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
                    if (file.getContentType().equals("application/zip") || file.getContentType().equals("application/x-zip-compressed")) {
                        backName = file.getOriginalFilename().replace(".zip","_"+Func.formatDate(new Date()));
                        fileType = "zip";
                        backName = file.getOriginalFilename().replace(".zip","_" + currentDateTime);
                    }else{
                        backName = file.getOriginalFilename().replace(".","_"+Func.formatDate(new Date())+".");
                        fileType = "file";
                        backName = file.getOriginalFilename().replace(".","_" + currentDateTime + ".");
                    }
                    File source = new File(deployAppsDB.get(0).getServerPath() + this.SEPARATOR + file.getOriginalFilename().replace(".zip", ""));
                    File destination = new File(deployAppsDB.get(0).getFileBack() + this.SEPARATOR + backName);
@@ -338,6 +347,7 @@
                return "The executed command is empty";
            }
            // æ‰§è¡ŒLinux命令
            log.info("开始执行命令:"+cmd);
            Process process = Runtime.getRuntime().exec(cmd);
            // è¯»å–命令执行结果
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
@@ -347,7 +357,7 @@
            }
            // ç­‰å¾…命令执行完成
            int exitCode = process.waitFor();
            log.info("命令执行结果:" + output.toString());
            log.info("命令执行结果:" + output.toString()+":"+exitCode);
            return output.toString();
        }catch (IOException | InterruptedException e){
            e.printStackTrace();