wzy 2 周之前
父節點
當前提交
5f4205f936

+ 2 - 1
mjava-jinlun/src/main/java/com/malk/jinlun/service/impl/JinlunTaskServiceImpl.java

@@ -150,7 +150,7 @@ public class JinlunTaskServiceImpl implements JinlunTaskService {
 
         BillQuery billQuery = new BillQuery();
         billQuery.setFormId("SAL_OUTSTOCK");
-        billQuery.setFieldKeys("FBillNo,FBillTypeID.FName,FDate,FSettleCurrID.FName,FCustomerID.FName,FCustomerID.FShortName,FHeadLocationID.FName,FMaterialID.FNumber,FMaterialID.FName,FMaterialID.FSpecification,FMaterialID.F_Sl_ducengid,F_VMKV_Text_WLZT,FPriceUnitQty,FRealQty,FUnitID.FName,FPriceUnitId.FName,FAuxUnitID.FName,FAuxUnitQty,FIsFree,FPrice,FTaxPrice,FEntryTaxRate,FAmount,FAllAmount,FDiscount,FEntrynote");
+        billQuery.setFieldKeys("FBillNo,FBillTypeID.FName,FDate,FSettleCurrID.FName,FCustomerID.FName,FCustomerID.FShortName,FCustomerID.FNumber,FHeadLocationID.FName,FMaterialID.FNumber,FMaterialID.FName,FMaterialID.FSpecification,FMaterialID.F_Sl_ducengid,F_VMKV_Text_WLZT,FPriceUnitQty,FRealQty,FUnitID.FName,FPriceUnitId.FName,FAuxUnitID.FName,FAuxUnitQty,FIsFree,FPrice,FTaxPrice,FEntryTaxRate,FAmount,FAllAmount,FDiscount,FEntrynote");
         List<Map> filterString = new ArrayList<>();
 
         //审核日期为昨天至今天
@@ -189,6 +189,7 @@ public class JinlunTaskServiceImpl implements JinlunTaskService {
             data.put("ShortText1760153691233",UtilMap.getString(saleOut,"FSettleCurrID.FName"));//结算币别
             data.put("ShortText1760153707273",UtilMap.getString(saleOut,"FCustomerID.FName"));//客户名称
             data.put("ShortText1760153714871",UtilMap.getString(saleOut,"FCustomerID.FShortName"));//客户简称
+            data.put("ShortText1768439848740",UtilMap.getString(saleOut,"FCustomerID.FNumber"));//客户简称
             data.put("ShortText1760153722192",UtilMap.getString(saleOut,"FHeadLocationID.FName"));//交货地点
 
             List<Map> entry = new ArrayList<>();

+ 7 - 1
mjava-lianan/pom.xml

@@ -38,18 +38,24 @@
         <dependency>
             <groupId>com.malk</groupId>
             <artifactId>base</artifactId>
-            <version>2.0</version>
+            <version>1.3</version>
         </dependency>
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
             <version>1.18.30</version>
         </dependency>
+        <!--RSA 依赖-->
         <dependency>
             <artifactId>bcprov-jdk15on</artifactId>
             <groupId>org.bouncycastle</groupId>
             <version>1.70</version>
         </dependency>
+        <dependency>
+            <groupId>org.jolokia</groupId>
+            <artifactId>jolokia-core</artifactId>
+            <version>1.6.1</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 0 - 45
mjava-lianan/src/main/java/com/malk/lianan/RsaUtil.java

@@ -1,45 +0,0 @@
-package com.malk.lianan;
-
-import cn.hutool.core.codec.Base64;
-import org.bouncycastle.jce.provider.BouncyCastleProvider;
-
-import java.security.KeyFactory;
-import java.security.PrivateKey;
-import java.security.Signature;
-import java.security.spec.PKCS8EncodedKeySpec;
-
-public class RsaUtil {
-
-    private final static String KEY_RSA = "RSA";
-    private final static String KEY_RSA_SIGNATURE = "SHA256WithRSA";
-    private static BouncyCastleProvider bouncyCastleProvider = new BouncyCastleProvider();
-
-    public static String sign(byte[] data, String privateKey) {
-        String str = "";
-        try {
-// 解密由 base64 编码的私钥
-            byte[] bytes = decryptBase64(privateKey);
-// 构造 PKCS8EncodedKeySpec 对象
-            PKCS8EncodedKeySpec pkcs = new PKCS8EncodedKeySpec(bytes);
-// 指定的加密算法
-            KeyFactory factory = KeyFactory.getInstance(KEY_RSA,bouncyCastleProvider);
-// 取私钥对象
-            PrivateKey key = factory.generatePrivate(pkcs);
-// 用私钥对信息生成数字签名
-            Signature signature =Signature.getInstance(KEY_RSA_SIGNATURE,bouncyCastleProvider);
-            signature.initSign(key);
-            signature.update(data);
-            str = encryptBase64(signature.sign());
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return str;
-    }
-    public static byte[] decryptBase64(String key) throws Exception {
-        return Base64.decode(key);
-    }
-    public static String encryptBase64(byte[] key) throws Exception {
-        return new String(Base64.encode(key));
-    }
-
-}

文件差異過大導致無法顯示
+ 0 - 195
mjava-lianan/src/main/java/com/malk/lianan/TestUtil.java


文件差異過大導致無法顯示
+ 73 - 4
mjava-lianan/src/main/java/com/malk/lianan/controller/LianAnGyPayController.java


+ 13 - 0
mjava-lianan/src/main/java/com/malk/lianan/service/LianAnGyPayService.java

@@ -0,0 +1,13 @@
+package com.malk.lianan.service;
+
+import com.malk.server.common.McR;
+
+import java.util.Map;
+
+public interface LianAnGyPayService {
+    McR pay(Map map);
+
+    McR retryPay(Map map);
+
+    void callback(Map result);
+}

文件差異過大導致無法顯示
+ 263 - 0
mjava-lianan/src/main/java/com/malk/lianan/service/impl/LianAnGyServiceImpl.java


+ 1 - 1
mjava-lianan/src/main/java/com/malk/lianan/AesUtil.java

@@ -1,4 +1,4 @@
-package com.malk.lianan;
+package com.malk.lianan.utils;
 
 import cn.hutool.core.codec.Base64;
 import cn.hutool.crypto.Mode;

+ 1 - 1
mjava-lianan/src/main/java/com/malk/lianan/RSASignatureUtil.java

@@ -1,4 +1,4 @@
-package com.malk.lianan;
+package com.malk.lianan.utils;
 
 import cn.hutool.core.codec.Base64;
 import cn.hutool.core.exceptions.ExceptionUtil;

+ 111 - 0
mjava-lianan/src/main/java/com/malk/lianan/utils/RsaUtil.java

@@ -0,0 +1,111 @@
+package com.malk.lianan.utils;
+
+import cn.hutool.core.codec.Base64;
+import com.malk.utils.UtilFile;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.jolokia.util.Base64Util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.security.KeyFactory;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.security.Signature;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.util.Objects;
+
+public class RsaUtil {
+
+    private final static String KEY_RSA = "RSA";
+    private final static String KEY_RSA_SIGNATURE = "SHA256WithRSA";
+    private static BouncyCastleProvider bouncyCastleProvider = new BouncyCastleProvider();
+
+    private static final String SHA256WithRSA = "SHA256WithRSA";
+    private static final String X509 = "X.509";
+
+
+    public static String sign(byte[] data, String privateKey) {
+        String str = "";
+        try {
+            // 解密由 base64 编码的私钥
+            byte[] bytes = decryptBase64(privateKey);
+            // 构造 PKCS8EncodedKeySpec 对象
+            PKCS8EncodedKeySpec pkcs = new PKCS8EncodedKeySpec(bytes);
+            // 指定的加密算法
+            KeyFactory factory = KeyFactory.getInstance(KEY_RSA,bouncyCastleProvider);
+            // 取私钥对象
+            PrivateKey key = factory.generatePrivate(pkcs);
+            // 用私钥对信息生成数字签名
+            Signature signature =Signature.getInstance(KEY_RSA_SIGNATURE,bouncyCastleProvider);
+            signature.initSign(key);
+            signature.update(data);
+            str = encryptBase64(signature.sign());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return str;
+    }
+
+    //验签
+    public static boolean verifySign(byte[] data, String sign, String certificatePath) throws Exception {
+        // 获得证书
+        // certificatePath 为 cer 证书文件绝对路径
+        X509Certificate x509Certificate = (X509Certificate) getCertificate(certificatePath);
+        if (Objects.isNull(x509Certificate)) {
+            return false;
+        }
+        // 获得公钥
+        PublicKey publicKey = x509Certificate.getPublicKey();
+        // 构建签名
+        Signature signature = Signature.getInstance(SHA256WithRSA);
+        signature.initVerify(publicKey);
+        signature.update(data);
+        return signature.verify(Base64Util.decode(sign));
+    }
+
+    private static Certificate getCertificate(String certificatePath) throws Exception {
+        InputStream in = null;
+        try {
+            CertificateFactory certificateFactory = CertificateFactory.getInstance(X509);
+//            in = Files.newInputStream(Paths.get(certificatePath));
+
+            in = UtilFile.readPackageResource(certificatePath);
+            return certificateFactory.generateCertificate(in);
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        } finally {
+            if (in != null) {
+                try {
+                    in.close();
+                } catch (IOException e) {
+                    System.out.println(e.getMessage());
+                }
+            }
+        }
+        return null;
+    }
+
+    public static Certificate loadCertificate(String relativePathInResources) throws Exception {
+        // 使用 ClassLoader 获取资源流(路径以 / 开头表示从 classpath 根目录开始)
+        try (InputStream in = RsaUtil.class.getClassLoader().getResourceAsStream(relativePathInResources)) {
+            if (in == null) {
+                throw new IllegalArgumentException("Certificate not found in resources: " + relativePathInResources);
+            }
+            CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
+            return certificateFactory.generateCertificate(in);
+        }
+    }
+
+    public static byte[] decryptBase64(String key) throws Exception {
+        return Base64.decode(key);
+    }
+    public static String encryptBase64(byte[] key) throws Exception {
+        return new String(Base64.encode(key));
+    }
+
+}

文件差異過大導致無法顯示
+ 371 - 0
mjava-lianan/src/main/java/com/malk/lianan/utils/TestUtil.java


+ 35 - 0
mjava-lianan/src/main/resources/application-prod.yml

@@ -0,0 +1,35 @@
+server:
+  port: 9003
+  servlet:
+    context-path: /api/lianan
+
+spring:
+enable:
+  scheduling: false
+logging:
+  config: classpath:logback-spring.xml
+  path: /home/server/lianan/log/
+  level:
+    com.malk.*: debug
+
+# dingtalk
+dingtalk:
+  agentId: 4133525536
+  appKey: ding8x2uxxm58xz1x9oa
+  appSecret: x1P5rXTUa9ThrfXRbB1ujLlPQa86Ldm7YQ62hcKkdxPVSpyS86vE3ICZV0L6JXKg
+  corpId:
+  aesKey:
+  token:
+
+
+# teambition
+teambition:
+  AppID:
+  AppSecret:
+  TenantId:
+  OperatorId:    # 公共账号, 需要有操作权限 [牧语]
+# aliwork
+aliwork:
+  appType: APP_SHFYYZC42VXVVNZVOTLO
+  systemToken: 69G66AB1QAM1CZPQN13WT9MHRP5D3TFE78IJM3L71
+

+ 1 - 1
mjava-lianan/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: dev
+    active: prod
   servlet:
     multipart:
       max-file-size: 100MB