1
0

2 Commits b26e27c39e ... b41510b49b

Autor SHA1 Mensagem Data
  juxin_zhenghao b41510b49b 添加数字人民币模块 há 2 semanas atrás
  juxin_zhenghao 1ed9cf4d1e 解决打包缺失清单问题 há 1 mês atrás

+ 2 - 83
pom.xml

@@ -31,64 +31,6 @@
             <version>5.8.32</version>
         </dependency>
 
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>com.google.code.gson</groupId>
-            <artifactId>gson</artifactId>
-            <version>2.7</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.bouncycastle</groupId>
-            <artifactId>bcprov-jdk15on</artifactId>
-            <version>1.69</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.mybatis.spring.boot</groupId>
-            <artifactId>mybatis-spring-boot-starter</artifactId>
-            <version>2.1.0</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.junit.jupiter</groupId>
-            <artifactId>junit-jupiter</artifactId>
-            <version>5.8.1</version>
-        </dependency>
-
-<!--        <dependency>-->
-<!--            <groupId>mysql</groupId>-->
-<!--            <artifactId>mysql-connector-java</artifactId>-->
-<!--        </dependency>-->
-
-<!--        &lt;!&ndash; 阿里数据库连接池 &ndash;&gt;-->
-<!--        <dependency>-->
-<!--            <groupId>com.alibaba</groupId>-->
-<!--            <artifactId>druid-spring-boot-starter</artifactId>-->
-<!--            <version>1.2.11</version>-->
-<!--        </dependency>-->
-
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.13.2</version>
-            <scope>test</scope>
-        </dependency>
-
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
@@ -131,7 +73,8 @@
                 <version>${spring-boot.version}</version>
                 <configuration>
                     <mainClass>com.juxin.client.ClientApplication</mainClass>
-                    <skip>true</skip>
+                    <executable>true</executable>
+                    <layout>ZIP</layout>
                 </configuration>
                 <executions>
                     <execution>
@@ -141,31 +84,7 @@
                         </goals>
                     </execution>
                 </executions>
-
-
             </plugin>
-
-
-                <plugin>
-                    <groupId>org.springframework.boot</groupId>
-                    <artifactId>spring-boot-maven-plugin</artifactId>
-                    <version>2.6.13</version><!--  自己的SpingBoot版本   -->
-                    <configuration>
-                        <!--  自己的启动类地址   -->
-                        <mainClass>com.juxin.client.ClientApplication</mainClass>
-                    </configuration>
-                    <executions>
-                        <execution>
-                            <id>repackage</id>
-                            <goals>
-                                <goal>repackage</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </plugin>
-
-
-
         </plugins>
     </build>
 

+ 0 - 1
src/main/java/com/juxin/client/ClientApplication.java

@@ -1,6 +1,5 @@
 package com.juxin.client;
 
-import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

+ 226 - 226
src/main/java/com/juxin/client/rpa/utils/SM2Utils.java

@@ -1,226 +1,226 @@
-package com.juxin.client.rpa.utils;
-
-import com.google.gson.Gson;
-import com.juxin.client.rpa.constant.TaieOcConstants;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.bouncycastle.asn1.gm.GMNamedCurves;
-import org.bouncycastle.asn1.x9.X9ECParameters;
-import org.bouncycastle.crypto.CipherParameters;
-import org.bouncycastle.crypto.CryptoException;
-import org.bouncycastle.crypto.digests.SM3Digest;
-import org.bouncycastle.crypto.params.*;
-import org.bouncycastle.crypto.signers.SM2Signer;
-import org.bouncycastle.jce.provider.BouncyCastleProvider;
-import org.bouncycastle.util.encoders.Hex;
-
-import javax.crypto.Cipher;
-import javax.crypto.spec.SecretKeySpec;
-import java.math.BigInteger;
-import java.security.*;
-import java.util.Base64;
-import java.util.HashMap;
-import java.util.Map;
-
-@Slf4j
-public class SM2Utils {
-
-/*    @Value("93f2eca686469186")
-    private static String SM4_KEY;
-    @Value("00dc5fd5e756731eb744c36b72f2500fee1d1f589b89345b4d5496af66ac2c4911")
-    private static String privateKey;
-
-    @Value("040fccb5debc513fa63c46dc50ab0e0ab070393a96f9f1d31176f7cf651bfb4449ef1bdc8e3cfa6194563381afaee17603019075112c2d70dc1ec8fefc1a7f920b")
-    private static String publicKey;*/
-
-    private static final Gson gson = new Gson();
-
-    private static final String privateKey = "00dc5fd5e756731eb744c36b72f2500fee1d1f589b89345b4d5496af66ac2c4911";
-
-    private static final String publicKey = "040fccb5debc513fa63c46dc50ab0e0ab070393a96f9f1d31176f7cf651bfb4449ef1bdc8e3cfa6194563381afaee17603019075112c2d70dc1ec8fefc1a7f920b";
-    private static final String SM4_KEY = "93f2eca686469186";
-
-    static{
-        try{
-            Security.addProvider(new BouncyCastleProvider());
-        }catch(Exception e){
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * 许可生成
-     * @param licenseType
-     * @param machineType
-     * @param expireTime
-     * @param reqMap
-     * @return
-     */
-
-    public static String generateLicense(String licenseType, String machineType, String expireTime, Map<String, Object> reqMap) throws Exception {
-        SM2Utils sm = new SM2Utils();
-
-
-//          1.签名内容:{签名内容}={许可类型=机器类型=许可过期时间},设备ID由执行器上传,许可类型,许可有效期由平台填充,可根据需要扩充字段
-        String reqStr = reqMap == null? TaieOcConstants.EMPTY_STRING:gson.toJson(reqMap);
-        String sign_content = StringUtils.joinWith(TaieOcConstants.SIGN_DELIMA,licenseType,machineType,expireTime,reqStr);
-//          2.签名值:{签名值}+{时间戳}={签名内容}+{SM2私钥}
-        //获取SM2密钥,需要保存,公钥用来验签,私钥用来加签
-       // Map<String, String> SM2_key = sm.getpublicKey();
-        //使用SM2私钥加签{签名内容}
-        Map<String, String> map = sm.Sign(sign_content,privateKey, expireTime);
-
-//          3.加密签名内容:{加密签名内容}=({签名内容}=={时间戳})+{SM4加密}
-//          生成16位16进制SM4密钥,SM4加解密使用同一密钥加密({签名内容}=={时间戳}),解密需保存密钥值
-       // String SM4_key = sm.generateKey();
-//          根据签名内容SM2加密数据,SM2加签时间组合SM4加密数据
-        String sign_content_encrypt = map.get("sign")+ "==" +map.get("timestamp");
-//          使用SM4_key再次加密签名内容
-        String cipher = sm.encryptEcb(SM4_KEY, sign_content_encrypt);
-        return cipher;
-
-    }
-
-    /**
-     * sm4加密
-     *
-     * @param hexKey   16进制密钥(忽略大小写)
-     * @param paramStr 待加密字符串
-     * @return 返回16进制的加密字符串
-     * @explain 加密模式:ECB
-     * 密文长度不固定,会随着被加密字符串长度的变化而变化
-     */
-    public  String encryptEcb(String hexKey, String paramStr) {
-        try {
-            String cipherText = "";
-            // 16进制字符串-->byte[]
-            byte[] keyData = hexKey.getBytes("utf-8");
-            // String-->byte[]
-            byte[] srcData =paramStr.getBytes("utf-8");
-            // 加密后的数组
-            byte[] cipherArray = encryptEcbPadding(keyData, srcData);
-            // byte[]-->hexString
-            cipherText = Base64.getEncoder().encodeToString(cipherArray);
-            return cipherText;
-        } catch (Exception e) {
-            return paramStr;
-        }
-    }
-
-    /**
-     * 加密模式之Ecb
-     *
-     * @param key
-     * @param data
-     * @return
-     * @throws Exception
-     * @explain
-     */
-    public  byte[] encryptEcbPadding(byte[] key, byte[] data) throws Exception {
-        Cipher cipher = generateEcbCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.ENCRYPT_MODE, key);
-        return cipher.doFinal(data);
-    }
-
-    /**
-     * 生成ECB暗号
-     *
-     * @param algorithmName 算法名称
-     * @param mode          模式
-     * @param key
-     * @return
-     * @throws Exception
-     * @explain ECB模式(电子密码本模式:Electronic codebook)
-     */
-    private Cipher generateEcbCipher(String algorithmName, int mode, byte[] key) throws Exception {
-        Cipher cipher = Cipher.getInstance(algorithmName, BouncyCastleProvider.PROVIDER_NAME);
-        Key sm4Key = new SecretKeySpec(key, ALGORITHM_NAME);
-        cipher.init(mode, sm4Key);
-        return cipher;
-    }
-
-
-
-
-
-
-    /// <summary>
-    /// 签名,国密SM2
-    /// </summary>
-    /// <param name="body">参数内容</param>
-    /// <param name="privateKey">私钥</param>
-    /// <param name="sign">签名值</param>
-    /// <param name="timestamp">时间戳</param>
-    public  Map<String, String> Sign(String body, String privateKey, String dateStr)
-    {
-        Map<String, String> map = new HashMap<>();
-        String sign;
-        try {
-            if (body == null || body.equals("")) return null;
-            if (privateKey == null || privateKey.equals("")) return null;
-
-            // 加密算法采用SM2加密算法
-            sign = Hex.toHexString(Sign(body.getBytes("utf-8"), privateKey, dateStr.getBytes("utf-8")));
-            map.put("sign",sign);
-            map.put("timestamp",dateStr);
-        }catch (Exception e){
-            log.error("Sign error", e);
-        }
-        return map;
-    }
-
-    /// <summary>
-    /// 加签算法 标准C1C2C3模式
-    /// </summary>
-    /// <param name="sourceData">源数据</param>
-    /// <param name="privateKey">私钥</param>
-    /// <param name="userId">用户标识</param>
-    public  byte[] Sign(byte[] sourceData, String privateKey, byte[] userId) throws CryptoException
-    {
-        //获取一条SM2曲线参数
-        X9ECParameters sm2ECParameters = GMNamedCurves.getByName("sm2p256v1");
-        //构造domain参数
-        ECDomainParameters domainParameters = new ECDomainParameters(sm2ECParameters.getCurve(), sm2ECParameters.getG(), sm2ECParameters.getN());
-        BigInteger privateKeyD = new BigInteger(privateKey, 16);
-        ECPrivateKeyParameters privateKeyParameters = new ECPrivateKeyParameters(privateKeyD, domainParameters);
-        SM2Signer sm2 = new SM2Signer(new SM3Digest());
-        CipherParameters cp;
-        if (userId != null) cp = new ParametersWithID(new ParametersWithRandom(privateKeyParameters), userId);
-        else cp = new ParametersWithRandom(privateKeyParameters);
-        sm2.init(true, cp);
-        sm2.update(sourceData, 0, sourceData.length);
-        return sm2.generateSignature();
-    }
-
-
-
-
-
-
-    private static final String ENCODING = "UTF-8";
-    public static final String ALGORITHM_NAME = "SM4";
-    // 加密算法/分组加密模式/分组填充方式
-    // PKCS5Padding-以8个字节为一组进行分组加密
-    // 定义分组加密模式使用:PKCS5Padding
-    public static final String ALGORITHM_NAME_ECB_PADDING = "SM4/ECB/PKCS5Padding";
-    // 128-32位16进制;256-64位16进制
-    public static final int DEFAULT_KEY_SIZE = 64;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-}
-
+//package com.juxin.client.rpa.utils;
+//
+//import com.google.gson.Gson;
+//import com.juxin.client.rpa.constant.TaieOcConstants;
+//import lombok.extern.slf4j.Slf4j;
+//import org.apache.commons.lang3.StringUtils;
+//import org.bouncycastle.asn1.gm.GMNamedCurves;
+//import org.bouncycastle.asn1.x9.X9ECParameters;
+//import org.bouncycastle.crypto.CipherParameters;
+//import org.bouncycastle.crypto.CryptoException;
+//import org.bouncycastle.crypto.digests.SM3Digest;
+//import org.bouncycastle.crypto.params.*;
+//import org.bouncycastle.crypto.signers.SM2Signer;
+//import org.bouncycastle.jce.provider.BouncyCastleProvider;
+//import org.bouncycastle.util.encoders.Hex;
+//
+//import javax.crypto.Cipher;
+//import javax.crypto.spec.SecretKeySpec;
+//import java.math.BigInteger;
+//import java.security.*;
+//import java.util.Base64;
+//import java.util.HashMap;
+//import java.util.Map;
+//
+//@Slf4j
+//public class SM2Utils {
+//
+///*    @Value("93f2eca686469186")
+//    private static String SM4_KEY;
+//    @Value("00dc5fd5e756731eb744c36b72f2500fee1d1f589b89345b4d5496af66ac2c4911")
+//    private static String privateKey;
+//
+//    @Value("040fccb5debc513fa63c46dc50ab0e0ab070393a96f9f1d31176f7cf651bfb4449ef1bdc8e3cfa6194563381afaee17603019075112c2d70dc1ec8fefc1a7f920b")
+//    private static String publicKey;*/
+//
+//    private static final Gson gson = new Gson();
+//
+//    private static final String privateKey = "00dc5fd5e756731eb744c36b72f2500fee1d1f589b89345b4d5496af66ac2c4911";
+//
+//    private static final String publicKey = "040fccb5debc513fa63c46dc50ab0e0ab070393a96f9f1d31176f7cf651bfb4449ef1bdc8e3cfa6194563381afaee17603019075112c2d70dc1ec8fefc1a7f920b";
+//    private static final String SM4_KEY = "93f2eca686469186";
+//
+//    static{
+//        try{
+//            Security.addProvider(new BouncyCastleProvider());
+//        }catch(Exception e){
+//            e.printStackTrace();
+//        }
+//    }
+//
+//    /**
+//     * 许可生成
+//     * @param licenseType
+//     * @param machineType
+//     * @param expireTime
+//     * @param reqMap
+//     * @return
+//     */
+//
+//    public static String generateLicense(String licenseType, String machineType, String expireTime, Map<String, Object> reqMap) throws Exception {
+//        SM2Utils sm = new SM2Utils();
+//
+//
+////          1.签名内容:{签名内容}={许可类型=机器类型=许可过期时间},设备ID由执行器上传,许可类型,许可有效期由平台填充,可根据需要扩充字段
+//        String reqStr = reqMap == null? TaieOcConstants.EMPTY_STRING:gson.toJson(reqMap);
+//        String sign_content = StringUtils.joinWith(TaieOcConstants.SIGN_DELIMA,licenseType,machineType,expireTime,reqStr);
+////          2.签名值:{签名值}+{时间戳}={签名内容}+{SM2私钥}
+//        //获取SM2密钥,需要保存,公钥用来验签,私钥用来加签
+//       // Map<String, String> SM2_key = sm.getpublicKey();
+//        //使用SM2私钥加签{签名内容}
+//        Map<String, String> map = sm.Sign(sign_content,privateKey, expireTime);
+//
+////          3.加密签名内容:{加密签名内容}=({签名内容}=={时间戳})+{SM4加密}
+////          生成16位16进制SM4密钥,SM4加解密使用同一密钥加密({签名内容}=={时间戳}),解密需保存密钥值
+//       // String SM4_key = sm.generateKey();
+////          根据签名内容SM2加密数据,SM2加签时间组合SM4加密数据
+//        String sign_content_encrypt = map.get("sign")+ "==" +map.get("timestamp");
+////          使用SM4_key再次加密签名内容
+//        String cipher = sm.encryptEcb(SM4_KEY, sign_content_encrypt);
+//        return cipher;
+//
+//    }
+//
+//    /**
+//     * sm4加密
+//     *
+//     * @param hexKey   16进制密钥(忽略大小写)
+//     * @param paramStr 待加密字符串
+//     * @return 返回16进制的加密字符串
+//     * @explain 加密模式:ECB
+//     * 密文长度不固定,会随着被加密字符串长度的变化而变化
+//     */
+//    public  String encryptEcb(String hexKey, String paramStr) {
+//        try {
+//            String cipherText = "";
+//            // 16进制字符串-->byte[]
+//            byte[] keyData = hexKey.getBytes("utf-8");
+//            // String-->byte[]
+//            byte[] srcData =paramStr.getBytes("utf-8");
+//            // 加密后的数组
+//            byte[] cipherArray = encryptEcbPadding(keyData, srcData);
+//            // byte[]-->hexString
+//            cipherText = Base64.getEncoder().encodeToString(cipherArray);
+//            return cipherText;
+//        } catch (Exception e) {
+//            return paramStr;
+//        }
+//    }
+//
+//    /**
+//     * 加密模式之Ecb
+//     *
+//     * @param key
+//     * @param data
+//     * @return
+//     * @throws Exception
+//     * @explain
+//     */
+//    public  byte[] encryptEcbPadding(byte[] key, byte[] data) throws Exception {
+//        Cipher cipher = generateEcbCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.ENCRYPT_MODE, key);
+//        return cipher.doFinal(data);
+//    }
+//
+//    /**
+//     * 生成ECB暗号
+//     *
+//     * @param algorithmName 算法名称
+//     * @param mode          模式
+//     * @param key
+//     * @return
+//     * @throws Exception
+//     * @explain ECB模式(电子密码本模式:Electronic codebook)
+//     */
+//    private Cipher generateEcbCipher(String algorithmName, int mode, byte[] key) throws Exception {
+//        Cipher cipher = Cipher.getInstance(algorithmName, BouncyCastleProvider.PROVIDER_NAME);
+//        Key sm4Key = new SecretKeySpec(key, ALGORITHM_NAME);
+//        cipher.init(mode, sm4Key);
+//        return cipher;
+//    }
+//
+//
+//
+//
+//
+//
+//    /// <summary>
+//    /// 签名,国密SM2
+//    /// </summary>
+//    /// <param name="body">参数内容</param>
+//    /// <param name="privateKey">私钥</param>
+//    /// <param name="sign">签名值</param>
+//    /// <param name="timestamp">时间戳</param>
+//    public  Map<String, String> Sign(String body, String privateKey, String dateStr)
+//    {
+//        Map<String, String> map = new HashMap<>();
+//        String sign;
+//        try {
+//            if (body == null || body.equals("")) return null;
+//            if (privateKey == null || privateKey.equals("")) return null;
+//
+//            // 加密算法采用SM2加密算法
+//            sign = Hex.toHexString(Sign(body.getBytes("utf-8"), privateKey, dateStr.getBytes("utf-8")));
+//            map.put("sign",sign);
+//            map.put("timestamp",dateStr);
+//        }catch (Exception e){
+//            log.error("Sign error", e);
+//        }
+//        return map;
+//    }
+//
+//    /// <summary>
+//    /// 加签算法 标准C1C2C3模式
+//    /// </summary>
+//    /// <param name="sourceData">源数据</param>
+//    /// <param name="privateKey">私钥</param>
+//    /// <param name="userId">用户标识</param>
+//    public  byte[] Sign(byte[] sourceData, String privateKey, byte[] userId) throws CryptoException
+//    {
+//        //获取一条SM2曲线参数
+//        X9ECParameters sm2ECParameters = GMNamedCurves.getByName("sm2p256v1");
+//        //构造domain参数
+//        ECDomainParameters domainParameters = new ECDomainParameters(sm2ECParameters.getCurve(), sm2ECParameters.getG(), sm2ECParameters.getN());
+//        BigInteger privateKeyD = new BigInteger(privateKey, 16);
+//        ECPrivateKeyParameters privateKeyParameters = new ECPrivateKeyParameters(privateKeyD, domainParameters);
+//        SM2Signer sm2 = new SM2Signer(new SM3Digest());
+//        CipherParameters cp;
+//        if (userId != null) cp = new ParametersWithID(new ParametersWithRandom(privateKeyParameters), userId);
+//        else cp = new ParametersWithRandom(privateKeyParameters);
+//        sm2.init(true, cp);
+//        sm2.update(sourceData, 0, sourceData.length);
+//        return sm2.generateSignature();
+//    }
+//
+//
+//
+//
+//
+//
+//    private static final String ENCODING = "UTF-8";
+//    public static final String ALGORITHM_NAME = "SM4";
+//    // 加密算法/分组加密模式/分组填充方式
+//    // PKCS5Padding-以8个字节为一组进行分组加密
+//    // 定义分组加密模式使用:PKCS5Padding
+//    public static final String ALGORITHM_NAME_ECB_PADDING = "SM4/ECB/PKCS5Padding";
+//    // 128-32位16进制;256-64位16进制
+//    public static final int DEFAULT_KEY_SIZE = 64;
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//}
+//

+ 98 - 12
src/main/java/com/juxin/client/websocket/FindTask.java

@@ -6,11 +6,13 @@ import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.juxin.client.websocket.constant.GfConstants;
 import com.juxin.client.websocket.enums.WebsocketTypeEnum;
 import com.juxin.client.websocket.ppojo.BankCardSubjectResult;
+import com.juxin.client.websocket.ppojo.DigitalRmbSubjectBankInfo;
 import com.juxin.client.websocket.ppojo.DigitalRmbSubjectResult;
 import com.juxin.client.websocket.ppojo.WebsocketInfo;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -237,6 +239,10 @@ public class FindTask {
                 System.out.println("digitalRmbSubjectCommit 数字人民币主体提交1111111" + "*********************************************");
                 result = digitalRmbSubjectCommitTask(reqJson);
                 break;
+            case "digitalRmbCommit":
+                System.out.println("digitalRmbCommit 数字人民币提交1111111" + "*********************************************");
+                result = digitalRmbCommitTask(reqJson);
+                break;
             default:
                 break;
         }
@@ -385,6 +391,7 @@ public class FindTask {
         req.put("recordId", jsonObject.get("groupId"));
         req.put("groupId", jsonObject.get("groupId"));
         String jobState = status[RandomUtil.randomInt(0, 6)];
+//        jobState = "success";
         req.put("jobState", jobState);
         if (Objects.equals(jobState, "success")) {
             List<Map<String, String>> split = new ArrayList<>();
@@ -492,7 +499,7 @@ public class FindTask {
         List<Map<String, String>> split = new ArrayList<>();
         List<Map<String, String>> list = jsonObject.get("list", List.class);
         String jobState = status[RandomUtil.randomInt(0, 6)];
-        jobState = "success";
+//        jobState = "success";
         req.put("jobState", jobState);
         if (Objects.equals(jobState, "success")) {
             list.forEach(e -> {
@@ -501,6 +508,8 @@ public class FindTask {
                 map.put("bankName", e.get("bankName"));
                 map.put("result", "0000");
                 map.put("account", e.get("walletId"));
+                map.put("splitTime", DateUtil.format(new Date(), DatePattern.PURE_DATETIME_MS_PATTERN) + "-"
+                        + DateUtil.format(new Date(), DatePattern.PURE_DATETIME_MS_PATTERN));
                 split.add(map);
             });
             req.put("digitalRmbSubjectSplits", split);
@@ -511,6 +520,40 @@ public class FindTask {
         return JSONUtil.toJsonStr(result);
     }
 
+    public String digitalRmbCommitTask(Object reqJson) {
+        JSONObject jsonObject = JSONUtil.parseObj(reqJson);
+        Map<String, Object> result = new HashMap<>();
+        result.put("infoType", "over");
+        result.put("postType", "python");
+        result.put("methodType", "digitalRmbCommit");
+        Map<String, Object> req = new HashMap<>();
+        req.put("recordId", jsonObject.get("groupId"));
+        req.put("groupId", jsonObject.get("groupId"));
+        req.put("jobState", status[RandomUtil.randomInt(0, 6)]);
+        List<Map<String, String>> split = new ArrayList<>();
+        List<Map<String, String>> list = jsonObject.get("list", List.class);
+        String jobState = status[RandomUtil.randomInt(0, 6)];
+//        jobState = "fail";
+        req.put("jobState", jobState);
+        if (Objects.equals(jobState, "success")) {
+            list.forEach(e -> {
+                Map<String, String> map = new HashMap<>();
+                map.put("applicationid", IdUtil.fastSimpleUUID());
+                map.put("bankName", e.get("bankName"));
+                map.put("result", "0000");
+                map.put("account", e.get("walletId"));
+                map.put("splitTime", DateUtil.format(new Date(), DatePattern.PURE_DATETIME_MS_PATTERN) + "-"
+                        + DateUtil.format(new Date(), DatePattern.PURE_DATETIME_MS_PATTERN));
+                split.add(map);
+            });
+            req.put("digitalRmbSplits", split);
+        } else {
+            req.put("errorMsg", ERR_MSG[RandomUtil.randomInt(0, 6)]);
+        }
+        result.put("reqJson", req);
+        return JSONUtil.toJsonStr(result);
+    }
+
     /**
      * 回捞任务
      *
@@ -550,9 +593,13 @@ public class FindTask {
             case "digitalRmbSubjectResult":
                 System.out.println("digitalRmbSubjectResult 数字人民币主体结果回捞" + "--------------------------------------");
                 Thread.sleep(1000 * 30);
-
                 result = digitalRmbSubjectResultTask(reqJson);
                 break;
+            case "digitalRmbResult":
+                System.out.println("digitalRmbResult 数字人民币结果回捞" + "--------------------------------------");
+                Thread.sleep(1000 * 3);
+                result = digitalRmbResultTask(reqJson);
+                break;
             default:
                 break;
         }
@@ -620,20 +667,24 @@ public class FindTask {
         result.put("infoType", "result");
         result.put("postType", "python");
         result.put("methodType", "serialResult");
+        result.put("combineSearchFlag", "是");
+        result.put("combineSearchStart", "2025-03-05");
+        result.put("combineSearchEnd", "2025-05-05");
         Map<String, Object> req = new HashMap<>();
         req.put("applicationId", param.get("applicationid"));
         String splitResult = SPLIT_RESULT[RandomUtil.randomInt(0, 10)];
+//        splitResult = "机构已反馈";
         req.put("status", splitResult);
         if (Objects.equals(splitResult, "机构已反馈")) {
             req.put("valueCount", RandomUtil.randomInt(0, 10000));
             result.put("reqJson", req);
-            FileUtil.copy(FileUtil.file("excel/流水文件.xlsx")
+            FileUtil.copy(FileUtil.file("E:\\workspace\\jx\\workSpace\\rpaClient\\client\\excel\\流水号查询结果.xlsx")
                     , FileUtil.file(Objects.toString(param.get("file_path")))
                     , true);
         } else {
             req.put("valueCount", 0);
             result.put("reqJson", req);
-            FileUtil.copy(FileUtil.file("excel/流水空文件.xlsx")
+            FileUtil.copy(FileUtil.file("E:\\workspace\\jx\\workSpace\\rpaClient\\client\\excel\\流水号查询结果空文件.xlsx")
                     , FileUtil.file(Objects.toString(param.get("file_path")))
                     , true);
         }
@@ -653,6 +704,7 @@ public class FindTask {
         Map<String, Object> req = new HashMap<>();
         req.put("applicationId", param.get("applicationid"));
         String splitResult = SPLIT_RESULT[RandomUtil.randomInt(0, 10)];
+//        splitResult = "机构已反馈";
         String filePath = "E:\\workspace\\jx\\workSpace\\rpaClient\\client\\excel\\第三方全账户.xlsx";
         req.put("status", splitResult);
         if (Objects.equals(splitResult, "机构已反馈")) {
@@ -684,19 +736,20 @@ public class FindTask {
         Map<String, Object> req = new HashMap<>();
         req.put("applicationId", param.get("applicationid"));
         String splitResult = SPLIT_RESULT[RandomUtil.randomInt(0, 10)];
+//        splitResult="机构已反馈";
         req.put("status", splitResult);
         if (Objects.equals(splitResult, "机构已反馈")) {
             req.put("valueCount", RandomUtil.randomInt(0, 10000));
             result.put("reqJson", req);
-            FileUtil.copy(FileUtil.file("excel/银行卡全账户.xlsx")
+            FileUtil.copy(FileUtil.file("E:\\workspace\\jx\\workSpace\\rpaClient\\client\\excel\\银行卡全账户.xlsx")
                     , FileUtil.file(Objects.toString(param.get("file_path")))
                     , true);
         } else {
             req.put("valueCount", 0);
             result.put("reqJson", req);
-//            FileUtil.copy(FileUtil.file("excel/银行卡全账户空文件.xlsx")
-//                    , FileUtil.file(Objects.toString(param.get("file_path")))
-//                    , true);
+            FileUtil.copy(FileUtil.file("E:\\workspace\\jx\\workSpace\\rpaClient\\client\\excel\\银行卡全账户空文件.xlsx")
+                    , FileUtil.file(Objects.toString(param.get("file_path")))
+                    , true);
         }
         return JSONUtil.toJsonStr(result);
     }
@@ -825,7 +878,7 @@ public class FindTask {
         Map<String, Object> req = new HashMap<>();
         req.put("applicationId", param.get("applicationid"));
         String splitResult = SPLIT_RESULT[RandomUtil.randomInt(0, 10)];
-        splitResult = "机构已反馈";
+//        splitResult = "机构已反馈";
         req.put("status", splitResult);
         if (Objects.equals(splitResult, "机构已反馈")) {
             req.put("valueCount", RandomUtil.randomInt(0, 10000));
@@ -837,7 +890,7 @@ public class FindTask {
             digitalRmbSubjectResult.setQueryResult("1");
             digitalRmbSubjectResult.setMac("xx");
             digitalRmbSubjectResult.setCustomerName("张三");
-            digitalRmbSubjectResult.setWalletName("数字钱包 001");
+            digitalRmbSubjectResult.setWalletName("数字钱包");
             digitalRmbSubjectResult.setWalletType("01");
             digitalRmbSubjectResult.setWalletOpenTime("2024-01-01 10:00:00");
             digitalRmbSubjectResult.setWalletOrgCode("ORG001");
@@ -850,8 +903,12 @@ public class FindTask {
             digitalRmbSubjectResult.setParentWalletId("111");
             digitalRmbSubjectResult.setFrozenAmount("0.00");
             digitalRmbSubjectResult.setOpenMethod("01");
-            digitalRmbSubjectResult.setBoundBankCardJson("{}");
-            digitalRmbSubjectResult.setRegisteredBankCardJson("{}");
+
+            DigitalRmbSubjectBankInfo info= new DigitalRmbSubjectBankInfo("中国银行","112","借记卡","2026");
+            JSONArray jsonArray = new JSONArray();
+            jsonArray.add(info);
+            digitalRmbSubjectResult.setBoundBankCardJson(JSONUtil.toJsonStr( jsonArray));
+            digitalRmbSubjectResult.setRegisteredBankCardJson(JSONUtil.toJsonStr( jsonArray));
 
             digitalRmbSubjectResult.setWalletOrgCode("ORG001");
 
@@ -868,6 +925,35 @@ public class FindTask {
         return JSONUtil.toJsonStr(result);
     }
 
+
+    public String digitalRmbResultTask(Object reqJson) {
+        JSONObject jsonObject = JSONUtil.parseObj(reqJson);
+        JSONObject param = jsonObject.get("params", JSONObject.class);
+        Map<String, Object> result = new HashMap<>();
+        result.put("infoType", "result");
+        result.put("postType", "python");
+        result.put("methodType", "digitalRmbResult");
+        Map<String, Object> req = new HashMap<>();
+        req.put("applicationId", param.get("applicationid"));
+        String splitResult = SPLIT_RESULT[RandomUtil.randomInt(0, 10)];
+//        splitResult = "机构反馈失败,失败原因1";
+        req.put("status", splitResult);
+        if (Objects.equals(splitResult, "机构已反馈")) {
+            req.put("valueCount", RandomUtil.randomInt(0, 10000));
+            result.put("reqJson", req);
+            FileUtil.copy(FileUtil.file("E:\\workspace\\jx\\workSpace\\rpaClient\\client\\excel\\数字人民币结果.xlsx")
+                    , FileUtil.file(Objects.toString(param.get("file_path")))
+                    , true);
+        } else {
+            req.put("valueCount", 0);
+            result.put("reqJson", req);
+            FileUtil.copy(FileUtil.file("E:\\workspace\\jx\\workSpace\\rpaClient\\client\\excel\\数字人民币查询空结果.xlsx")
+                    , FileUtil.file(Objects.toString(param.get("file_path")))
+                    , true);
+        }
+        return JSONUtil.toJsonStr(result);
+    }
+
     public static void main(String[] args) {
         FileUtil.copy(FileUtil.file("excel/6226890438342486.xlsx")
                 , FileUtil.file("C:\\Users\\EDY\\Desktop\\需求\\银行卡查询\\test.xlsx")

+ 33 - 0
src/main/java/com/juxin/client/websocket/ppojo/DigitalRmbSubjectBankInfo.java

@@ -0,0 +1,33 @@
+package com.juxin.client.websocket.ppojo;
+
+import lombok.Data;
+
+@Data
+public class DigitalRmbSubjectBankInfo {
+    /**
+     * 所属银行名称
+     */
+    private String cardname;
+
+    /**
+     * 银行卡卡号
+     */
+    private String bankaccount;
+
+    /**
+     * 银行卡类型
+     */
+    private String cardtype;
+
+    /**
+     * 绑卡时间
+     */
+    private String bindcardtime;
+
+    public DigitalRmbSubjectBankInfo(String cardname, String bankaccount, String cardtype, String bindcardtime) {
+        this.cardname = cardname;
+        this.bankaccount = bankaccount;
+        this.cardtype = cardtype;
+        this.bindcardtime = bindcardtime;
+    }
+}

+ 15 - 15
src/test/java/com/juxin/client/websocket/FindTaskTest.java

@@ -223,21 +223,21 @@ class FindTaskTest {
         assertThat(findTaskUnderTest.allAccountCommitTask("reqJson")).isEqualTo("result");
     }
 
-    @Test
-    void testSearchTask() {
-        // Setup
-        final WebsocketInfo bean = WebsocketInfo.builder()
-                .infoType("infoType")
-                .methodType("methodType")
-                .reqJson("reqJson")
-                .build();
-
-        // Run the test
-        final String result = findTaskUnderTest.searchTask(bean);
-
-        // Verify the results
-        assertThat(result).isEqualTo("");
-    }
+//    @Test
+//    void testSearchTask() {
+//        // Setup
+//        final WebsocketInfo bean = WebsocketInfo.builder()
+//                .infoType("infoType")
+//                .methodType("methodType")
+//                .reqJson("reqJson")
+//                .build();
+//
+//        // Run the test
+//        final String result = findTaskUnderTest.searchTask(bean);
+//
+//        // Verify the results
+//        assertThat(result).isEqualTo("");
+//    }
 
     @Test
     void testBankResultTask() {