Commit 29fca704 authored by guozhipeng's avatar guozhipeng

添加前后端

parent 98d1f43d
{
"requires": {
"[hybrid]": {
"db": {
"binding": {
"type": "cf",
"apiEndpoint": "https://api.cf.cn40.platform.sapcloud.cn",
"org": "Shenzhen Lianchuangjie Technology Co., Ltd._trial-cjmy9gtn",
"space": "dev",
"instance": "lianchuangjie-third-dev",
"key": "lianchuangjie-third-dev-key",
"resolved": false
},
"kind": "hana",
"vcap": {
"name": "db"
}
}
}
}
}
\ No newline at end of file
...@@ -28,3 +28,13 @@ logs/ ...@@ -28,3 +28,13 @@ logs/
#忽略资源文件app #忽略资源文件app
**/resources/app/ **/resources/app/
# added by cds
.cdsrc-private.json
# added by cds
default-env.json
# 排除sapui5类库
app/main/webapp/resources/
...@@ -1328,7 +1328,7 @@ SELECT ...@@ -1328,7 +1328,7 @@ SELECT
ROUND(CIH.appliedMarketingAmount, 2) as appliedMarketingAmount : Decimal(20,6), ROUND(CIH.appliedMarketingAmount, 2) as appliedMarketingAmount : Decimal(20,6),
ROUND( ( ROUND( (
SELECT SELECT
COALESCE(CIH.totalReconcilingAmount, 0) / COALESCE(CIH.totalNetAmount, 1) * SUM(COALESCE(CII_sub.quantity,0) * COALESCE(OI_sub.commPrice,0)) - COALESCE(CIH.appliedMarketingAmount,0) COALESCE(CIH.totalReconcilingAmount, 0) / COALESCE(CIH.totalNetAmount, 1) * SUM(COALESCE(CII_sub.quantity,0) * COALESCE(OI_sub.commPrice,0)) - COALESCE(CIH.appliedMarketingAmount,0) AS applyAmount : Decimal(20,6)
FROM FROM
CustomerInvoiceItem AS CII_sub CustomerInvoiceItem AS CII_sub
LEFT JOIN LEFT JOIN
...@@ -1910,7 +1910,7 @@ FROM( ...@@ -1910,7 +1910,7 @@ FROM(
ROUND(SUM(ROUND(T0.amount *(CASE WHEN T0.accCurrency ='CNY' THEN 1 ELSE T1.currencyRate END),2))/SUM(T0.amount),6) AS accCurrencyRate:Decimal(20,6) ROUND(SUM(ROUND(T0.amount *(CASE WHEN T0.accCurrency ='CNY' THEN 1 ELSE T1.currencyRate END),2))/SUM(T0.amount),6) AS accCurrencyRate:Decimal(20,6)
FROM ClearItemAcc AS T0 FROM ClearItemAcc AS T0
LEFT JOIN CurrencyRate AS T1 ON T0.accCurrency = T1.baseCurrencyId AND TO_DATE(T0.accPostingDate) = TO_DATE(T1.date) LEFT JOIN CurrencyRate AS T1 ON T0.accCurrency = T1.baseCurrencyId AND TO_DATE(T0.accPostingDate) = TO_DATE(T1.date)
WHERE EXISTS(SELECT 1 FROM ClearItemInv WHERE docId = T0.docId) WHERE EXISTS(SELECT 1 AS num:Decimal(20,0) FROM ClearItemInv WHERE docId = T0.docId)
GROUP BY T0.docId GROUP BY T0.docId
) AS T10 ON T0.docId = T10.docId ) AS T10 ON T0.docId = T10.docId
LEFT JOIN PartyGroup AS T11 ON T1.businessPartnerCode = T11.partyId LEFT JOIN PartyGroup AS T11 ON T1.businessPartnerCode = T11.partyId
...@@ -2087,7 +2087,7 @@ SELECT ...@@ -2087,7 +2087,7 @@ SELECT
T12.docId, T12.docId,
ROUND(SUM(ROUND(T12.amount * (CASE WHEN T12.accCurrency = 'CNY' THEN 1 ELSE T14.currencyRate END), 2)) / SUM(T12.amount), 6) AS accCurrencyRate:Decimal(20,6) ROUND(SUM(ROUND(T12.amount * (CASE WHEN T12.accCurrency = 'CNY' THEN 1 ELSE T14.currencyRate END), 2)) / SUM(T12.amount), 6) AS accCurrencyRate:Decimal(20,6)
FROM (ClearItemAcc AS T12 LEFT JOIN CurrencyRate AS T14 ON T12.accCurrency = T14.baseCurrencyId AND TO_DATE(T12.accPostingDate) = TO_DATE(T14.date)) FROM (ClearItemAcc AS T12 LEFT JOIN CurrencyRate AS T14 ON T12.accCurrency = T14.baseCurrencyId AND TO_DATE(T12.accPostingDate) = TO_DATE(T14.date))
WHERE EXISTS (SELECT 1 WHERE EXISTS (SELECT 1 AS num:Decimal(20,0)
FROM ClearItemInv AS ClearItemInv_15 FROM ClearItemInv AS ClearItemInv_15
WHERE ClearItemInv_15.docId = T12.docId) WHERE ClearItemInv_15.docId = T12.docId)
GROUP BY T12.docId) AS T10 ON T0.docId = T10.docId GROUP BY T12.docId) AS T10 ON T0.docId = T10.docId
...@@ -2173,7 +2173,7 @@ SELECT ...@@ -2173,7 +2173,7 @@ SELECT
T12.docId, T12.docId,
ROUND(SUM(ROUND(T12.amount * (CASE WHEN T12.accCurrency = 'CNY' THEN 1 ELSE T14.currencyRate END), 2)) / SUM(T12.amount), 6) AS accCurrencyRate:Decimal(20,6) ROUND(SUM(ROUND(T12.amount * (CASE WHEN T12.accCurrency = 'CNY' THEN 1 ELSE T14.currencyRate END), 2)) / SUM(T12.amount), 6) AS accCurrencyRate:Decimal(20,6)
FROM (ClearItemAcc AS T12 LEFT JOIN CurrencyRate AS T14 ON T12.accCurrency = T14.baseCurrencyId AND TO_DATE(T12.accPostingDate) = TO_DATE(T14.date)) FROM (ClearItemAcc AS T12 LEFT JOIN CurrencyRate AS T14 ON T12.accCurrency = T14.baseCurrencyId AND TO_DATE(T12.accPostingDate) = TO_DATE(T14.date))
WHERE EXISTS (SELECT 1 WHERE EXISTS (SELECT 1 AS num:Decimal(20,0)
FROM ClearItemInv AS ClearItemInv_15 FROM ClearItemInv AS ClearItemInv_15
WHERE ClearItemInv_15.docId = T12.docId) WHERE ClearItemInv_15.docId = T12.docId)
GROUP BY T12.docId) AS T10 ON T0.docId = T10.docId GROUP BY T12.docId) AS T10 ON T0.docId = T10.docId
......
{
"VCAP_SERVICES": {
"hana": [
{
"name": "lianchuangjie-third-dev",
"tags": [
"hana"
],
"credentials": {
"database_id": "2d430e6a-d593-479a-81ca-2c16b3d02fb8",
"host": "2d430e6a-d593-479a-81ca-2c16b3d02fb8.hana.prod-cn40.hanacloud.sapcloud.cn",
"port": "443",
"driver": "com.sap.db.jdbc.Driver",
"url": "jdbc:sap://2d430e6a-d593-479a-81ca-2c16b3d02fb8.hana.prod-cn40.hanacloud.sapcloud.cn:443?encrypt=true&validateCertificate=true&currentschema=4463D610D634419185156207F6466C66",
"schema": "4463D610D634419185156207F6466C66",
"certificate": "-----BEGIN CERTIFICATE-----\nMIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nd3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\nQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\nMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\nb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\nCSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\nnh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\nT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\ngdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\nBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\nTLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\nDQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\nhMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\nPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\nYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\nCAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n-----END CERTIFICATE-----",
"hdi_user": "4463D610D634419185156207F6466C66_04YSPTUBGSHDTJKL6EQXZQWAG_DT",
"hdi_password": "Wv2L7XbCFAc2ZUltcPlPz5TCmIBX8DbiA.h.VW5Dgqar_80t7YGOeyr5S7cykbq3YCKDmaDeGrA0eLEfabJ5iDU0bNPMwpGfRggwo3PYNOgQPvBA06_6bG78ffmYAc_J",
"user": "4463D610D634419185156207F6466C66_04YSPTUBGSHDTJKL6EQXZQWAG_RT",
"password": "Yp07qvl-pLiep3ldscvXok8qE_fkDrx3MgY8KUGGs089qztseg.Uc3P85Q9pJi9_WedhCs8XAgH.kRQQ1KMQmVTvwKTmAYK2ra.Ab8OC7Ni.banykH7HppNEWk88yyku"
}
}
]
}
}
\ No newline at end of file
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
"@sap/hdi-deploy": "^4" "@sap/hdi-deploy": "^4"
}, },
"engines": { "engines": {
"node": "^16 || ^18" "node": "^20.0.0"
}, },
"scripts": { "scripts": {
"start": "node node_modules/@sap/hdi-deploy/deploy.js", "start": "node node_modules/@sap/hdi-deploy/deploy.js",
......
{
"VCAP_SERVICES": {
"hana": [
{
"name": "lianchuangjie-third-dev",
"tags": [
"hana"
],
"credentials": {
"database_id": "2d430e6a-d593-479a-81ca-2c16b3d02fb8",
"host": "2d430e6a-d593-479a-81ca-2c16b3d02fb8.hana.prod-cn40.hanacloud.sapcloud.cn",
"port": "443",
"driver": "com.sap.db.jdbc.Driver",
"url": "jdbc:sap://2d430e6a-d593-479a-81ca-2c16b3d02fb8.hana.prod-cn40.hanacloud.sapcloud.cn:443?encrypt=true&validateCertificate=true&currentschema=4E1E80FC745F4D39B3EBDCC75B6AA41F",
"schema": "4E1E80FC745F4D39B3EBDCC75B6AA41F",
"certificate": "-----BEGIN CERTIFICATE-----\nMIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nd3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\nQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\nMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\nb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\nCSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\nnh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\nT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\ngdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\nBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\nTLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\nDQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\nhMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\nPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\nYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\nCAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n-----END CERTIFICATE-----",
"hdi_user": "4E1E80FC745F4D39B3EBDCC75B6AA41F_70OD3UR9MC9RI3QJCAJJJA5Z3_DT",
"hdi_password": "Yf9zhGf.WqUYwyCiY3WRj1p_ZgaTYn3ih7SzX3cyrkPUR1s2EKQdm464uyxdLRlzpRYjRA0zjycFVgVE1b8c.aFNZN9HccMw2KMm3UCqnKMjUET8VRnkOXtFjQ0Vjbux",
"user": "4E1E80FC745F4D39B3EBDCC75B6AA41F_70OD3UR9MC9RI3QJCAJJJA5Z3_RT",
"password": "Hf5UHB2NiTDEkJ.pOLZEIkc6YzJnuLhrjuoSA7ZRR8ypNocqEAqv.a7_1fmECHIpf7s6D_SkWl_ap6WYXa-EeWDqYfXlhAeyx0dULWKFdTH8Ue7w221k3SAQFV5DDnXO"
}
}
]
}
}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
_schema-version: '3.1'
ID: lianchuangjie
version: 1.0.0-SNAPSHOT
description: "A simple CAP project."
parameters:
enable-parallel-deployments: true
build-parameters:
before-all:
- builder: custom
commands:
- npm ci
- npx cds build --production
modules:
- name: lianchuangjie-test-srv
type: java
path: srv
parameters:
buildpack: sap_java_buildpack_jakarta
readiness-health-check-type: http
readiness-health-check-http-endpoint: /
routes:
- route: lianchuangjie-tes-srv.unibetter-ic.com
properties:
SPRING_PROFILES_ACTIVE: cloud,sandbox
JBP_CONFIG_COMPONENTS: "jres: ['com.sap.xs.java.buildpack.jre.SAPMachineJRE']"
JBP_CONFIG_SAP_MACHINE_JRE: '{ version: 17.+ }'
build-parameters:
builder: custom
commands:
- mvn clean package -DskipTests=true
build-result: target/*-exec.jar
provides:
- name: srv-api # required by consumers of CAP services (e.g. approuter)
properties:
srv-url: "${protocol}://${routes/0/route}"
requires:
- name: lianchuangjie-test-db
- name: lianchuangjie-test-auth
- name: app-api
properties:
CDS_MULTITENANCY_APPUI_URL: ~{url}
- name: lianchuangjie-test-db-deployer
type: hdb
path: db
parameters:
buildpack: nodejs_buildpack
build-parameters:
builder: custom
commands:
- npm run build
requires:
- name: lianchuangjie-test-db
- name: main
type: html5
path: app/main
build-parameters:
supported-platforms:
[]
build-result: .
- name: orders
type: html5
path: app/orders
build-parameters:
builder: custom
commands:
- npm run build
supported-platforms:
[ ]
build-result: .
- name: lianchuangjie-test
type: approuter.nodejs
path: app\router
parameters:
#keep-existing-routes: true
disk-quota: 1024M
memory: 512M
routes:
- route: lianchuangjie-test.unibetter-ic.com
keep-existing-routes: true
requires:
- name: srv-api
group: destinations
properties:
name: srv-api # must be used in xs-app.json as well
url: ~{srv-url}
forwardAuthToken: true
- name: lianchuangjie-test-auth
build-parameters:
requires:
- name: main
artifacts:
- './*'
target-path: main
- name: orders
artifacts:
- './*'
target-path: orders
provides:
- name: app-api
properties:
app-protocol: ${protocol}
app-uri: "${protocol}://${routes/0/route}"
url: "${protocol}://${routes/0/route}"
resources:
- name: lianchuangjie-test-db
type: com.sap.xs.hdi-container
parameters:
service: hana
service-plan: hdi-shared
- name: lianchuangjie-test-auth
type: org.cloudfoundry.managed-service
parameters:
service: xsuaa
service-plan: application
path: ./xs-security.json
config:
xsappname: lianchuangjie-test-${org}-${space}
tenant-mode: dedicated
...@@ -3,5 +3,16 @@ ...@@ -3,5 +3,16 @@
"version": "1.0.0", "version": "1.0.0",
"description": "Generated by cds-services-archetype", "description": "Generated by cds-services-archetype",
"license": "ISC", "license": "ISC",
"repository": "<Add your repository here>" "repository": "<Add your repository here>",
"devDependencies": {
"@sap/cds-dk": "^7",
"@sap/ux-specification": "^1.124.8"
},
"sapux": [
"app/main",
"app/orders"
],
"dependencies": {
"lianchuangjie-cds": "file:"
}
} }
<project xmlns="http://maven.apache.org/POM/4.0.0" <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>customer</groupId> <groupId>customer</groupId>
<artifactId>lianchuangjie-parent</artifactId> <artifactId>lianchuangjie-parent</artifactId>
<version>${revision}</version> <version>${revision}</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<name>lianchuangjie parent</name> <name>lianchuangjie parent</name>
<properties> <properties>
<!-- OUR VERSION -->
<revision>1.0.0-SNAPSHOT</revision> <revision>1.0.0-SNAPSHOT</revision>
<!-- DEPENDENCIES VERSION -->
<jdk.version>17</jdk.version> <jdk.version>17</jdk.version>
<cds.services.version>2.9.1</cds.services.version> <cds.services.version>2.9.1</cds.services.version>
<spring.boot.version>3.2.5</spring.boot.version> <spring.boot.version>3.2.5</spring.boot.version>
<cds.install-cdsdk.version>7.9.2</cds.install-cdsdk.version> <cds.install-cdsdk.version>7.9.2</cds.install-cdsdk.version>
<cds.install-node.downloadUrl>https://nodejs.org/dist/</cds.install-node.downloadUrl> <cds.install-node.downloadUrl>https://nodejs.org/dist/</cds.install-node.downloadUrl>
<!--Skipping Tests-->
<maven.test.skip>true</maven.test.skip> <maven.test.skip>true</maven.test.skip>
<!--resources encoding-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
<modules> <modules>
<module>srv</module> <module>srv</module>
</modules> </modules>
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
<!-- CDS SERVICES -->
<dependency> <dependency>
<groupId>com.sap.cds</groupId> <groupId>com.sap.cds</groupId>
<artifactId>cds-services-bom</artifactId> <artifactId>cds-services-bom</artifactId>
...@@ -43,8 +27,6 @@ ...@@ -43,8 +27,6 @@
<type>pom</type> <type>pom</type>
<scope>import</scope> <scope>import</scope>
</dependency> </dependency>
<!-- SPRING BOOT -->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId> <artifactId>spring-boot-dependencies</artifactId>
...@@ -54,10 +36,8 @@ ...@@ -54,10 +36,8 @@
</dependency> </dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
<build> <build>
<plugins> <plugins>
<!-- JAVA VERSION -->
<plugin> <plugin>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version> <version>3.11.0</version>
...@@ -66,8 +46,6 @@ ...@@ -66,8 +46,6 @@
<encoding>UTF-8</encoding> <encoding>UTF-8</encoding>
</configuration> </configuration>
</plugin> </plugin>
<!-- MAKE SPRING BOOT PLUGIN RUNNABLE FROM ROOT -->
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
...@@ -75,16 +53,13 @@ ...@@ -75,16 +53,13 @@
<configuration> <configuration>
<includeSystemScope>true</includeSystemScope> <includeSystemScope>true</includeSystemScope>
<skip>true</skip> <skip>true</skip>
<workingDirectory>..</workingDirectory>
</configuration> </configuration>
</plugin> </plugin>
<!-- SUREFIRE VERSION -->
<plugin> <plugin>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
<version>3.1.2</version> <version>3.1.2</version>
</plugin> </plugin>
<!-- POM FLATTENING FOR CI FRIENDLY VERSIONS -->
<plugin> <plugin>
<groupId>org.codehaus.mojo</groupId> <groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId> <artifactId>flatten-maven-plugin</artifactId>
...@@ -110,8 +85,6 @@ ...@@ -110,8 +85,6 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<!-- PROJECT STRUCTURE CHECKS -->
<plugin> <plugin>
<artifactId>maven-enforcer-plugin</artifactId> <artifactId>maven-enforcer-plugin</artifactId>
<version>3.3.0</version> <version>3.3.0</version>
...@@ -129,7 +102,7 @@ ...@@ -129,7 +102,7 @@
<requireJavaVersion> <requireJavaVersion>
<version>${jdk.version}</version> <version>${jdk.version}</version>
</requireJavaVersion> </requireJavaVersion>
<reactorModuleConvergence /> <reactorModuleConvergence/>
</rules> </rules>
<fail>true</fail> <fail>true</fail>
</configuration> </configuration>
......
...@@ -318,6 +318,11 @@ ...@@ -318,6 +318,11 @@
<version>0.11.2</version> <version>0.11.2</version>
<scope>runtime</scope> <scope>runtime</scope>
</dependency> </dependency>
<dependency>
<groupId>com.sap.cds</groupId>
<artifactId>cds-starter-cloudfoundry</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -5,16 +5,10 @@ import org.springframework.boot.SpringApplication; ...@@ -5,16 +5,10 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@Slf4j @Slf4j
@ServletComponentScan @ServletComponentScan
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
...@@ -25,53 +19,6 @@ public class Application { ...@@ -25,53 +19,6 @@ public class Application {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(Application.class, args); SpringApplication.run(Application.class, args);
//BTP部署时批处理程序自动修改为true,本地开发不执行
if (false) {
//显式调用 复制文件目录 部署到BTP时需要将前端静态文件目录复制到可访问的路径下
//Logo path: /home/vcap/app/BOOT-INF/classes/app/index.html
//Logo path: /home/vcap/app/app/error-log.html
//String targetFolderPath = "/home/vcap/app";
String targetFolderPath = System.getProperty("user.dir");
String sourceFolderPath = targetFolderPath + "/BOOT-INF/classes/app";
log.info("sourceFolderPath:" + sourceFolderPath);
log.info("targetFolderPath:" + targetFolderPath);
try {
// 复制目录
copyDirectory(sourceFolderPath, targetFolderPath);
log.info("[Files.move]success");
} catch (IOException e) {
log.error(e.getMessage(), e);
log.error("[Files.createDirectories]IOException:" + e);
}
}
}
// 复制文件
public static void copyFile(String sourcePath, String targetPath) throws IOException {
Path source = Paths.get(sourcePath);
Path target = Paths.get(targetPath);
Files.copy(source, target);
}
// 复制目录
public static void copyDirectory(String sourceDir, String targetDir) throws IOException {
Path source = Paths.get(sourceDir);
Path target = Paths.get(targetDir);
Files.walk(source).forEach(sourcePath -> {
Path targetPath = target.resolve(source.relativize(sourcePath));
try {
if (Files.isDirectory(sourcePath)) {
Files.createDirectories(targetPath);
} else {
Files.copy(sourcePath, targetPath,
java.nio.file.StandardCopyOption.REPLACE_EXISTING);
}
} catch (IOException e) {
log.error(e.getMessage(), e);
log.error("[Files.walk]IOException:" + e);
}
});
} }
} }
...@@ -9,8 +9,9 @@ import org.springframework.web.filter.CorsFilter; ...@@ -9,8 +9,9 @@ import org.springframework.web.filter.CorsFilter;
@Configuration @Configuration
public class CorsConfig { public class CorsConfig {
/*
@Bean @Bean
public FilterRegistrationBean corsFilter() { public FilterRegistrationBean<CorsFilter> corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration(); CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true); config.setAllowCredentials(true);
...@@ -18,8 +19,37 @@ public class CorsConfig { ...@@ -18,8 +19,37 @@ public class CorsConfig {
config.addAllowedHeader("*"); config.addAllowedHeader("*");
config.addAllowedMethod("*"); config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config); // CORS 配置对所有接口都有效 source.registerCorsConfiguration("/**", config); // CORS 配置对所有接口都有效
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source)); *//*报错
2025-01-22 18:05:46.574 [restartedMain] ERROR org.springframework.boot.SpringApplication:851 - Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name
'org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration':
Unsatisfied dependency expressed through method 'setFilterChains' parameter 0: Error creating bean with name
'mockFilterChain' defined in class path resource [com/sap/cds/framework/spring/config/auth/mock/MockUsersSecurityConfig.class]:
Failed to instantiate [org.springframework.security.web.SecurityFilterChain]: Factory method 'mockFilterChain'
threw exception with message: Bean named 'corsFilter' is expected to be of type 'org.springframework.web.filter.CorsFilter'
but was actually of type 'org.springframework.boot.web.servlet.FilterRegistrationBean'
*//*
FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
bean.setOrder(0); bean.setOrder(0);
return bean; return bean;
} }
*/
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOriginPattern("*");//*表示允许所有
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config); // CORS 配置对所有接口都有效
return new CorsFilter(source);
}
@Bean
public FilterRegistrationBean<CorsFilter> corsFilterRegistration(CorsFilter corsFilter) {
FilterRegistrationBean<CorsFilter> registrationBean = new FilterRegistrationBean<>(corsFilter);
registrationBean.setOrder(0);
return registrationBean;
}
} }
package customer.lianchuangjie.common.filter; package customer.lianchuangjie.common.filter;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.sap.cds.ql.Select;
import customer.lianchuangjie.common.constant.CommonConstant; import customer.lianchuangjie.common.constant.CommonConstant;
import customer.lianchuangjie.common.exception.BtpException; import customer.lianchuangjie.common.exception.BtpException;
import customer.lianchuangjie.common.util.*; import customer.lianchuangjie.common.util.*;
...@@ -14,8 +15,13 @@ import lombok.extern.slf4j.Slf4j; ...@@ -14,8 +15,13 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
...@@ -82,6 +88,63 @@ public class OperateAuthFilter implements Filter { ...@@ -82,6 +88,63 @@ public class OperateAuthFilter implements Filter {
} }
} }
} }
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null && authentication.isAuthenticated()) {
String name = authentication.getName();//用户名 Username user/sap.default/zhipeng.guo@boscloud.cn
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();//权限的集合
Object credentials = authentication.getCredentials();//获取凭证
Object details = authentication.getDetails();//获取详细信息
org.springframework.security.core.userdetails.User principal = (User) authentication.getPrincipal();//获取主体信息
//Collection<GrantedAuthority> authorities0 = principal.getAuthorities();
boolean isAuthenticated = authentication.isAuthenticated();//判断是否已认证
log.info("用户名:{}", name);
log.info("返回一个包含授予权限的集合:{}", authorities);//Granted Authorities=[ROLE_ANONYMOUS]
log.info("获取凭证:{}", credentials);//登录密码 Credentials=[PROTECTED],
log.info("获取详细信息:{}", details);//Details=WebAuthenticationDetails [RemoteIpAddress=127.0.0.1, SessionId=null],
log.info("判断是否已认证:{}", isAuthenticated);//Authenticated=true,
log.info("获取主体信息:{}", principal);//登录账号 Principal=anonymousUser,
log.info("获取主体信息getUsername:{}", principal.getUsername());
log.info("获取主体信息getPassword:{}", principal.getPassword());
log.info("获取主体信息getAuthorities:{}", principal.getAuthorities());
log.info("获取主体信息isEnabled:{}", principal.isEnabled());
/*
未登录时,使用的是匿名用户
用户名getName:anonymousUser
角色集合getAuthorities:[ROLE_ANONYMOUS]
登陆后使用的是配置文件中的用户
用户名getName:sabine
角色集合getAuthorities:[Administrators]
*/
//返回结果
JSONObject result = new JSONObject();
result.put("name", name);
result.put("authorities", authorities);
result.put("credentials", credentials);
result.put("details", details);
result.put("principal", principal);
result.put("isAuthenticated", isAuthenticated);
result.put("success", false);
result.put("code", 403);
if (authorities == null || authorities.isEmpty()) {
result.put("message", "Username " + name + " Authorities " + authorities + " is null or empty!");
/*// 返回给前端
HttpServletResponse response = (HttpServletResponse) servletResponse;
// 设置返回状态码,比如403表示禁止访问
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
response.setContentType("application/json; charset=utf-8");
PrintWriter out = servletResponse.getWriter();
out.println(result.toString());
out.flush();
out.close();
return;*/
}
}
//TODO 郭智朋 测试中 处理ODATA接口 //TODO 郭智朋 测试中 处理ODATA接口
/*Cookie[] cookies = request.getCookies(); /*Cookie[] cookies = request.getCookies();
if (appKey == null && cookies != null && cookies.length > 0 && "/odata/v4/orderService/$batch".equals(uri)) { if (appKey == null && cookies != null && cookies.length > 0 && "/odata/v4/orderService/$batch".equals(uri)) {
...@@ -150,32 +213,33 @@ public class OperateAuthFilter implements Filter { ...@@ -150,32 +213,33 @@ public class OperateAuthFilter implements Filter {
return;// 跳过后面的认证 return;// 跳过后面的认证
} }
// OData接口仅允许本机访问 // OData接口仅允许本机访问
if (Pattern.matches("(.*/odata/v4/.*)", uri)) { // if (Pattern.matches("(.*/odata/v4/.*)", uri)) {
if ("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip)) {// 本机访问 // if ("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip)) {// 本机访问
} else { // } else {
if (!Pattern.matches("(.*exampleService/ExampleView.*)", uri)) { // if (!Pattern.matches("(.*exampleService/ExampleView.*)", uri)) {
return; // return;
} // }
} // }
} // }
// 禁止非POST/GET方式访问 // 禁止非POST/GET方式访问
if (!request.getMethod().equals("POST") && !request.getMethod().equals("GET")) { if (!request.getMethod().equals("POST") && !request.getMethod().equals("GET")) {
return; return;
} }
if (request.getMethod().equals("GET") && ("/index.html".equals(uri))) {// "/index.html"跳转到"/" /*if (request.getMethod().equals("GET") && ("/index.html".equals(uri))) {// "/index.html"跳转到"/"
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache"); response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "0"); response.setHeader("Expires", "0");
response.sendRedirect("/");//重定向 response.sendRedirect("/");//重定向
return; return;
} }*/
if (request.getMethod().equals("GET") && ("/".equals(uri))) {// "/"是OData默认首页 禁止访问OData默认首页 /*if (request.getMethod().equals("GET") && ("/".equals(uri))) {// "/"是OData默认首页 禁止访问OData默认首页
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache"); response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "0"); response.setHeader("Expires", "0");
request.getServletContext().getRequestDispatcher("/index.html").forward(request, response);//重定向 //request.getServletContext().getRequestDispatcher("/index.html").forward(request, response);//重定向
request.getServletContext().getRequestDispatcher("/app/webapp/index.html").forward(request, response);//重定向
return; return;
} }*/
boolean allowUri = Pattern.matches("(.*/login/.*|.*/odata/v4/.*)", uri); boolean allowUri = Pattern.matches("(.*/login/.*|.*/odata/v4/.*)", uri);
//排除用户登录和非Post请求 //排除用户登录和非Post请求
if (!allowUri && request.getMethod().equals("POST")) { if (!allowUri && request.getMethod().equals("POST")) {
......
{
"VCAP_SERVICES": {
"hana": [
{
"name": "lianchuangjie-third-dev",
"tags": [
"hana"
],
"credentials": {
"database_id": "2d430e6a-d593-479a-81ca-2c16b3d02fb8",
"host": "2d430e6a-d593-479a-81ca-2c16b3d02fb8.hana.prod-cn40.hanacloud.sapcloud.cn",
"port": "443",
"driver": "com.sap.db.jdbc.Driver",
"url": "jdbc:sap://2d430e6a-d593-479a-81ca-2c16b3d02fb8.hana.prod-cn40.hanacloud.sapcloud.cn:443?encrypt=true&validateCertificate=true&currentschema=4E1E80FC745F4D39B3EBDCC75B6AA41F",
"schema": "4E1E80FC745F4D39B3EBDCC75B6AA41F",
"certificate": "-----BEGIN CERTIFICATE-----\nMIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nd3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\nQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\nMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\nb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\nCSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\nnh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\nT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\ngdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\nBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\nTLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\nDQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\nhMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\nPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\nYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\nCAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n-----END CERTIFICATE-----",
"hdi_user": "4E1E80FC745F4D39B3EBDCC75B6AA41F_70OD3UR9MC9RI3QJCAJJJA5Z3_DT",
"hdi_password": "Yf9zhGf.WqUYwyCiY3WRj1p_ZgaTYn3ih7SzX3cyrkPUR1s2EKQdm464uyxdLRlzpRYjRA0zjycFVgVE1b8c.aFNZN9HccMw2KMm3UCqnKMjUET8VRnkOXtFjQ0Vjbux",
"user": "4E1E80FC745F4D39B3EBDCC75B6AA41F_70OD3UR9MC9RI3QJCAJJJA5Z3_RT",
"password": "Hf5UHB2NiTDEkJ.pOLZEIkc6YzJnuLhrjuoSA7ZRR8ypNocqEAqv.a7_1fmECHIpf7s6D_SkWl_ap6WYXa-EeWDqYfXlhAeyx0dULWKFdTH8Ue7w221k3SAQFV5DDnXO"
}
}
]
}
}
...@@ -2,66 +2,65 @@ server: ...@@ -2,66 +2,65 @@ server:
port: 8080 port: 8080
spring: spring:
profiles: profiles:
# 当前所属环境,见“webJavaBtp.sh” [dev|tes|pre|pro] active: dev
active: "dev"
servlet: servlet:
multipart: multipart:
enabled: true enabled: true
# 最大上传单个文件大小:默认1M
max-file-size: 1024MB max-file-size: 1024MB
# 设置总上传的数据大小 :默认10M
max-request-size: 1024MB max-request-size: 1024MB
data: data:
redis: redis:
database: 0 database: 0
host: 127.0.0.1 host: 127.0.0.1
password: '123456' password: "123456"
port: 6379 port: 6379
lettuce: lettuce:
pool: pool:
max-active: 8 #最大连接数据库连接数,设 0 为没有限制 max-active: 8
max-idle: 8 #最大等待连接中的数量,设 0 为没有限制 max-idle: 8
max-wait: -1ms #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。 max-wait: -1ms
min-idle: 0 #最小等待连接中的数量,设 0 为没有限制 min-idle: 0
shutdown-timeout: 10000ms shutdown-timeout: 10000ms
jackson: jackson:
deserialization: deserialization:
USE_BIG_DECIMAL_FOR_FLOATS: true USE_BIG_DECIMAL_FOR_FLOATS: true
## quartz定时任务,采用数据库方式
quartz: quartz:
#job-store-type: jdbc
#initialize-schema: embedded
#定时任务启动开关,true-开 false-关
#【本机永远是“false”,不要改此配置,防止本机运行了其它开发人员的各种用途的定时任务】
#【本机永远是“false”,调试JOB中的方法写Test单元测试类,例如:customer.lianchuangjie.example.service.impl.ExampleServiceImplTest】
auto-startup: false auto-startup: false
#延迟1秒启动定时任务
startup-delay: 1s startup-delay: 1s
#启动时更新己存在的Job
overwrite-existing-jobs: true overwrite-existing-jobs: true
web.resources.static-locations: file:./app/
# sql.init.schema-locations: classpath:schema-h2.sql
# mybatis:
# type-aliases-package: customer.captest.entity # 定义所有操作类的别名所在包
# mapper-locations: # 所有的mapper映射文件
# - classpath:customer/captest/mapper/xml/*.xml
# configuration:
# map-underscore-to-camel-case: true
cds: cds:
index-page.enabled: true
datasource.auto-config.enabled: true datasource.auto-config.enabled: true
sql.supportedLocales: "*" sql.supportedLocales: "*"
security:
# 日志配置 mock:
users:
- name: klaus
password: pass_klaus
additional:
firstName: Klaus
lastName: Sussard
email: Klaus.Sussard@mail.com
- name: mia
password: pass_mia
additional:
firstName: Mia
lastName: Bonnellac
email: Mia.Bonnellac@mail.com
- name: sabine
password: pass_sabine
roles:
- Administrators
additional:
firstName: Sabine
lastName: Autumnpike
email: Sabine.Autumnpike@mail.com
logging: logging:
level: level:
# customer.lianchuangjie 这个包下面的日志输出等级,可以开发环境、生产环境做区分
customer.lianchuangjie: debug customer.lianchuangjie: debug
# 自定义配置
custom: custom:
# 文件服务器配置
file-server: file-server:
# host: http://127.0.0.1:8888
host: https://files.unibetter.com.cn:9443 host: https://files.unibetter.com.cn:9443
goldenHost: https://file.unibetter-ic.com:9445 goldenHost: https://file.unibetter-ic.com:9445
api-token: 349643c7221246a098b3ccfc958fc6a1 api-token: 349643c7221246a098b3ccfc958fc6a1
...@@ -69,32 +68,25 @@ custom: ...@@ -69,32 +68,25 @@ custom:
feiShu: ba2b9f82-fbd6-4169-87b1-592a242e839c feiShu: ba2b9f82-fbd6-4169-87b1-592a242e839c
logs: 0d693250-4a96-4c3e-b6ef-fd036207baa8 logs: 0d693250-4a96-4c3e-b6ef-fd036207baa8
thirdPartyAiProduct: 8baf352f-14fb-4516-b494-08e881ff93df thirdPartyAiProduct: 8baf352f-14fb-4516-b494-08e881ff93df
# CRM系统
crm: crm:
mock: true # 启用模拟数据:true/false mock: true
partyIds: 'P0065335,P001' partyIds: P0065335,P001
# SRM系统
srm: srm:
mock: true # 启用模拟数据:true/false mock: true
partyIds: 'P0065335,P001' partyIds: P0065335,P001
#BTP&飞书 审批
approve: approve:
appID: 'cli_a6066a3851e09013' appID: cli_a6066a3851e09013
appSecret: 'zRlioK2J30QeQT0U1IdLGbMLYBPgnXes' appSecret: zRlioK2J30QeQT0U1IdLGbMLYBPgnXes
replaceUserId: true #是否替换审批人 true替换(用户ID bf7c5a7f) false 不替换 replaceUserId: true
# 飞书消息
feiShuMessage: feiShuMessage:
mock: true # 启用模拟数据:true/false mock: true
partyIds: 'ag945gfb,f526ag28' partyIds: ag945gfb,f526ag28
# IP白名单 ipWhitelist: false
ipWhitelist: false # 启用/停用:true/false
# 金税
invoice: invoice:
baiwang: baiwang:
url: 'https://openapi.baiwang.com/router/rest' url: https://openapi.baiwang.com/router/rest
appKey: '10004443' appKey: "10004443"
appSecret: '440a84b7-91f5-4302-9294-93ca7cd2c4d1' appSecret: 440a84b7-91f5-4302-9294-93ca7cd2c4d1
username: 'admin_f3eduypdkidox' username: admin_f3eduypdkidox
password: 'dra58RVLwIum' password: dra58RVLwIum
userSalt: '90325567aed34da0bdfa4496192d132e' userSalt: 90325567aed34da0bdfa4496192d132e
{
"VCAP_SERVICES": {
"hana": [
{
"name": "lianchuangjie-third-dev",
"tags": [
"hana"
],
"credentials": {
"database_id": "2d430e6a-d593-479a-81ca-2c16b3d02fb8",
"host": "2d430e6a-d593-479a-81ca-2c16b3d02fb8.hana.prod-cn40.hanacloud.sapcloud.cn",
"port": "443",
"driver": "com.sap.db.jdbc.Driver",
"url": "jdbc:sap://2d430e6a-d593-479a-81ca-2c16b3d02fb8.hana.prod-cn40.hanacloud.sapcloud.cn:443?encrypt=true&validateCertificate=true&currentschema=4E1E80FC745F4D39B3EBDCC75B6AA41F",
"schema": "4E1E80FC745F4D39B3EBDCC75B6AA41F",
"certificate": "-----BEGIN CERTIFICATE-----\nMIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nd3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\nQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\nMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\nb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\nCSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\nnh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\nT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\ngdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\nBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\nTLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\nDQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\nhMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\nPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\nYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\nCAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n-----END CERTIFICATE-----",
"hdi_user": "4E1E80FC745F4D39B3EBDCC75B6AA41F_70OD3UR9MC9RI3QJCAJJJA5Z3_DT",
"hdi_password": "Yf9zhGf.WqUYwyCiY3WRj1p_ZgaTYn3ih7SzX3cyrkPUR1s2EKQdm464uyxdLRlzpRYjRA0zjycFVgVE1b8c.aFNZN9HccMw2KMm3UCqnKMjUET8VRnkOXtFjQ0Vjbux",
"user": "4E1E80FC745F4D39B3EBDCC75B6AA41F_70OD3UR9MC9RI3QJCAJJJA5Z3_RT",
"password": "Hf5UHB2NiTDEkJ.pOLZEIkc6YzJnuLhrjuoSA7ZRR8ypNocqEAqv.a7_1fmECHIpf7s6D_SkWl_ap6WYXa-EeWDqYfXlhAeyx0dULWKFdTH8Ue7w221k3SAQFV5DDnXO"
}
}
]
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment