xiongzhu 3 лет назад
Родитель
Сommit
a228f703ed

+ 21 - 0
src/main/java/com/izouma/nineth/domain/AdaTrade.java

@@ -0,0 +1,21 @@
+package com.izouma.nineth.domain;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+@Data
+public class AdaTrade {
+    private String 交易时间;
+    private String 订单号;
+    private String 支付流水号;
+    private String 账户号;
+    private String 应用;
+    private String 支付渠道;
+    private String 交易状态;
+    private String 交易金额;
+    private String 手续费金额;
+    private String 第三方订单号;
+    @ExcelProperty("支付宝/微信订单号")
+    private String 支付宝_微信订单号;
+    private String 备注描述;
+}

+ 2 - 0
src/main/java/com/izouma/nineth/repo/GiftOrderRepo.java

@@ -18,4 +18,6 @@ public interface GiftOrderRepo extends JpaRepository<GiftOrder, Long>, JpaSpecif
     @Modifying
     @Modifying
     @Transactional
     @Transactional
     void softDelete(Long id);
     void softDelete(Long id);
+
+    GiftOrder findByTransactionId(String txId);
 }
 }

+ 2 - 0
src/main/java/com/izouma/nineth/repo/OrderRepo.java

@@ -33,4 +33,6 @@ public interface OrderRepo extends JpaRepository<Order, Long>, JpaSpecificationE
     @Query("select count(o) from Order o join Collection c on o.collectionId = c.id " +
     @Query("select count(o) from Order o join Collection c on o.collectionId = c.id " +
             "where c.minterId = ?1 and c.source = 'OFFICIAL' and o.status <> 'NOT_PAID' and o.status <> 'CANCELLED'")
             "where c.minterId = ?1 and c.source = 'OFFICIAL' and o.status <> 'NOT_PAID' and o.status <> 'CANCELLED'")
     long countSales(Long userId);
     long countSales(Long userId);
+
+    Order findByTransactionId(String txId);
 }
 }

+ 57 - 147
src/test/java/com/izouma/nineth/service/AdapayServiceTest.java

@@ -1,183 +1,93 @@
 package com.izouma.nineth.service;
 package com.izouma.nineth.service;
 
 
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.EasyExcel;
-import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.serializer.SerializerFeature;
-import com.huifu.adapay.Adapay;
+import com.alibaba.fastjson.JSONObject;
 import com.huifu.adapay.core.exception.BaseAdaPayException;
 import com.huifu.adapay.core.exception.BaseAdaPayException;
-import com.huifu.adapay.model.AdapayCommon;
-import com.huifu.adapay.model.MerConfig;
-import com.huifu.adapay.model.Payment;
 import com.huifu.adapay.model.Refund;
 import com.huifu.adapay.model.Refund;
+import com.izouma.nineth.ApplicationTests;
+import com.izouma.nineth.domain.AdaTrade;
+import com.izouma.nineth.repo.GiftOrderRepo;
+import com.izouma.nineth.repo.OrderRepo;
 import com.izouma.nineth.utils.SnowflakeIdWorker;
 import com.izouma.nineth.utils.SnowflakeIdWorker;
-import com.izouma.nineth.utils.excel.BigIntegerConverter;
-import com.izouma.nineth.utils.excel.LocalDateConverter;
-import com.izouma.nineth.utils.excel.LocalDateTimeConverter;
-import lombok.Data;
-import org.apache.commons.lang3.StringUtils;
 import org.junit.Test;
 import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
 
 
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ForkJoinPool;
+import java.util.stream.Collectors;
 
 
-public class AdapayServiceTest {
-    private final String appId = "app_f8760acc-f4d8-46f6-8f70-d80e36517075";
+public class AdapayServiceTest extends ApplicationTests {
+    @Autowired
+    private OrderRepo         orderRepo;
+    @Autowired
+    private GiftOrderRepo     giftOrderRepo;
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
 
 
-    public AdapayServiceTest() {
-        Adapay.debug = true;
-        Adapay.prodMode = true;
-
-        MerConfig merConfig = new MerConfig();
-        merConfig.setApiKey("api_live_8818cac1-894b-40bc-ac77-803e02e9c260");
-        merConfig.setApiMockKey("api_test_0b1b0eb9-30e1-4acd-8e03-10b529de1856");
-        merConfig.setRSAPrivateKey("MIIEuwIBADANBgkqhkiG9w0BAQEFAASCBKUwggShAgEAAoIBAQCnIaIrFP598qcf/s3FqXxMTjrVAevnf1w5CAMdJqcRFv0WvdLEmNRxxqAYSLl/iQ8AyU4yqVwkwYqvn/aENBg0iQ5h5qboxb8T6xmrZLctk97TiIuCUwbd7Q5NBHJXzHlaKc1p1KBvTCJDMw8+t0Jh3sBkBvu7l0KPliEQHtPLBDkKvy3NBQD6BMy47kPersjSUH53HBvNpcjcPZGpUX/TmL3SNkS98RkoebFxuorK5UdazYN5xvarjfcYziShIjU3WIZJb52DGUxYWTk6vJKZrJhw7AhWIEQpH7qJxvml/B8RMQ4guHdtp3ojxwkHDtZdPU9rY8i6EHwba4qOYgobAgMBAAECggEAT36L5/oAYl+8ZleIAHBxEspS6WYUkvPdJbNN59uus04/60U2rxQSWFulYmeU87h5TmJxs18i2MjF8msfkhpFORfHo4FV+nm0PQEiIIezKRagcfUMhlx/c6eBmdh3mpNDVUN01NWxyb5ovZXXtnjsNikBUZKQwdVcb3d1GnnPO0xtt6/0xwiduCkA2ihS1tgnsYYDhMHgukIdZ3eczn3stRPQ+QyCt1JWS6DDd1nS3S2RyPZw8P9Z1zzJFVKH8z3bGqk3/98Lw7Hw+rKFnKhIA6/H9ZVORKw5OuGC3Ozy6cVbmUn8tuw3sC0NdR7w56dedB+fjJB8od0nahX1Cc6eQQKBgQDckcenslWqjs2PbncwW1wqlw7FdJX9rzJAg7kp9ItpHCoNi/kSgXeLphHXWJmyj7a1BkWynmTGxO48X3dPXUrDPFKJc42fSbxMgAQdtc/A2z+v7Ga/oUpH8jajKfKmcgeRX026R7gd9W0yi0EW+C0WdFhrzNKKY4shvnYy9lc+QwKBgQDB+mHSllqLqYru0bLrtKOKJXaR3N3INxDBZKnRqba4tUKN35IVIexiEMkHmC51jtjoRyA5Y+fc/8P11i9FbuShtRVGHWeyDibKlwff5zrETveSLTpSULBKZ6MsFSm0Fo1krSUC1QTUGG5VX/wwWm9AB2UKJqG5cMDd3i3RiPeDSQKBgBs1ED+rS83iF5Eduy4H1vKZ94R7wRSty7ERjoGSXK/2fWl2Xp7dwXVEYucBUtQnzg2+XFKQHzY1jH19+SWdCF/UzQmPa2S+n6+ACwHvL1VGtjBpJLN2nccKJZsyzW+imTRhYSEdP6TSZUnay4idzFH8v/tsJHxVkw/ygnn+0PwpAn8uOHsWsrzgioWQYmc/wss1H7ghCX/PNU/IxTOxwb7IRGiXZa5pWqv4sgc0yA5J9L+6mTgUdLnK7ybCbUbWRJY18fAfxOHwi26y10oJEA/wtuBG9H/xHUjkcc1vs5s8TiNi2d73zcpYv3mK3lQ5MVNQ7nIk+Q+QIE3UkBxa0UgpAoGBAMDwg0ebzBEZsV2cr/Er2b25LsXteDJ+V67plBNrv+A1/omA9a52sWek4bY0D+Uu6zPTDaLj9BhHC2wJmThYl0eLRKyDKYQslBR3h253Gsn3If6RH9/tSyDsQ88iAEI1f6QH27bGHL9VDrsLGEFg5E7ZEzFQuJPqoUvBOoURNwa6");
-        merConfig.setRSAPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApyGiKxT+ffKnH/7Nxal8TE461QHr539cOQgDHSanERb9Fr3SxJjUccagGEi5f4kPAMlOMqlcJMGKr5/2hDQYNIkOYeam6MW/E+sZq2S3LZPe04iLglMG3e0OTQRyV8x5WinNadSgb0wiQzMPPrdCYd7AZAb7u5dCj5YhEB7TywQ5Cr8tzQUA+gTMuO5D3q7I0lB+dxwbzaXI3D2RqVF/05i90jZEvfEZKHmxcbqKyuVHWs2Decb2q433GM4koSI1N1iGSW+dgxlMWFk5OrySmayYcOwIViBEKR+6icb5pfwfETEOILh3bad6I8cJBw7WXT1Pa2PIuhB8G2uKjmIKGwIDAQAB");
-        Adapay.publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwN6xgd6Ad8v2hIIsQVnbt8a3JituR8o4Tc3B5WlcFR55bz4OMqrG/356Ur3cPbc2Fe8ArNd/0gZbC9q56Eb16JTkVNA/fye4SXznWxdyBPR7+guuJZHc/VW2fKH2lfZ2P3Tt0QkKZZoawYOGSMdIvO+WqK44updyax0ikK6JlNQIDAQAB";
-        try {
-            Adapay.initWithMerConfig(merConfig);
-        } catch (Exception e) {
-        }
-    }
-
-    @Test
-    public void testPay() throws BaseAdaPayException {
-        Map<String, Object> paymentParams = new HashMap<String, Object>(10);
-        List<Map<String, Object>> divMembers = new ArrayList<>();
-        divMembers.add(new HashMap<>() {{
-            put("member_id", "0");
-            put("amount", BigDecimal.valueOf(0.05));
-            put("fee_flag", "Y");
-        }});
-        divMembers.add(new HashMap<>() {{
-            put("member_id", "1110");
-            put("amount", BigDecimal.valueOf(0.05));
-        }});
-
-        paymentParams.put("app_id", appId);
-        paymentParams.put("order_no", "jsdk_payment" + System.currentTimeMillis());
-        paymentParams.put("pay_channel", "wx_pub");
-        paymentParams.put("pay_amt", "0.10");
-        paymentParams.put("goods_title", "your goods title");
-        paymentParams.put("goods_desc", "your goods desc");
-        paymentParams.put("notify_url", "http://9th.frp.izouma.com/notify/adapay/order/1");
-        paymentParams.put("description", "orderId=1");
-
-        Map<String, Object> expend = new HashMap<>();
-        expend.put("open_id", "oWJG55wLnwdVzXoKka1-DzQKOd_Y");
-        paymentParams.put("expend", expend);
-
-        Map<String, Object> payment = Payment.create(paymentParams);
-        System.out.println("payment result=" + JSON.toJSONString(payment, SerializerFeature.PrettyFormat));
-    }
+    private final String appId = "app_0e8d3acb-3d95-4ebb-8445-e470c378a787";
 
 
     @Test
     @Test
-    public void testWxPay() throws BaseAdaPayException {
-        Map<String, Object> params = new HashMap<String, Object>();
-        params.put("order_no", "host_wx_lite_params_sdk_" + System.currentTimeMillis());
-        params.put("adapay_func_code", "wxpay.createOrder");
-        params.put("pay_amt", "0.02");
-        params.put("app_id", appId);
-        params.put("currency", "cny");
-        params.put("goods_title", "Your goods_title");
-        params.put("goods_desc", "Your goods_desc");
-        params.put("description", "payment Discription");
-        params.put("callback_url", "/9th/orders");
-        Map<String, Object> response = AdapayCommon.requestAdapayUits(params);
-        System.out.println("payment result=" + JSON.toJSONString(response, SerializerFeature.PrettyFormat));
-    }
-
-    @Data
-    public static class RefundOrder {
-        @ExcelProperty("交易时间")
-        private LocalDateTime time;
+    public void queryRefund() throws ExecutionException, InterruptedException {
 
 
-        @ExcelProperty("订单号")
-        private String id;
+        ForkJoinPool customThreadPool = new ForkJoinPool(100);
+        customThreadPool.submit(() -> {
 
 
-        @ExcelProperty("支付流水号")
-        private String serial;
+            List<AdaTrade> list = EasyExcel.read("/Users/drew/Downloads/merTransDetail_0284905900625472_20220212_20220212_1644980532.xlsx")
+                    .head(AdaTrade.class).sheet().doReadSync();
+            list = list.parallelStream().filter(adaTrade -> {
+                return adaTrade.get交易金额().equals("19.80")
+                        && orderRepo.findByTransactionId(adaTrade.get支付流水号()) == null
+                        && giftOrderRepo.findByTransactionId(adaTrade.get支付流水号()) == null;
+            }).collect(Collectors.toList());
 
 
-        @ExcelProperty("第三方订单号")
-        private String thirdId;
+            EasyExcel.write("/Users/drew/Downloads/1.xlsx", AdaTrade.class).sheet("模板").doWrite(list);
+            System.out.println(list.size());
 
 
-        @ExcelProperty("支付宝/微信订单号")
-        private String txId;
 
 
-        @ExcelProperty("交易金额")
-        private String amount;
+        }).get();
 
 
-        private String refundId;
     }
     }
 
 
     @Test
     @Test
-    public void refund() throws BaseAdaPayException {
-        List<RefundOrder> orders = EasyExcel.read("/Users/drew/Downloads/merTransDetail_0284905900625472_20211201_20211215_1639557451.xlsx")
-                .head(RefundOrder.class)
-                .registerConverter(new LocalDateConverter())
-                .registerConverter(new LocalDateTimeConverter())
-                .registerConverter(new BigIntegerConverter())
-                .sheet().doReadSync();
-        System.out.println(orders.size());
-        for (RefundOrder order : orders) {
-            String refundId = new SnowflakeIdWorker(0, 0).nextId() + "";
+    public void refund() {
+        List<AdaTrade> list = EasyExcel.read("/Users/drew/Downloads/1.xlsx")
+                .head(AdaTrade.class).sheet().doReadSync();
+        list.parallelStream().forEach(adaTrade -> {
             Map<String, Object> refundParams = new HashMap<>();
             Map<String, Object> refundParams = new HashMap<>();
-            refundParams.put("refund_amt", order.getAmount());
-            refundParams.put("refund_order_no", new SnowflakeIdWorker(0, 0).nextId() + "");
-            Map<String, Object> response = Refund.create(order.getId(), refundParams);
-            order.setRefundId(refundId);
-        }
-        EasyExcel.write("/Users/drew/Desktop/refund.xlsx", RefundOrder.class).sheet("sheet")
-                .registerConverter(new LocalDateConverter())
-                .registerConverter(new LocalDateTimeConverter())
-                .registerConverter(new BigIntegerConverter())
-                .doWrite(orders);
+            refundParams.put("refund_amt", adaTrade.get交易金额());
+            refundParams.put("refund_order_no", snowflakeIdWorker.nextId() + "");
+            try {
+                Map<String, Object> response = Refund.create(adaTrade.get支付流水号(), refundParams);
+            } catch (BaseAdaPayException e) {
+                e.printStackTrace();
+            }
+        });
     }
     }
 
 
-
     @Test
     @Test
-    public void queryrefund() throws BaseAdaPayException {
-        List<RefundOrder> orders = EasyExcel.read("/Users/drew/Desktop/refund.xlsx")
-                .head(RefundOrder.class)
-                .registerConverter(new LocalDateConverter())
-                .registerConverter(new LocalDateTimeConverter())
-                .registerConverter(new BigIntegerConverter())
-                .sheet().doReadSync();
-        System.out.println(orders.size());
-        List<String> success = new ArrayList<>();
-        List<String> fail = new ArrayList<>();
-        for (RefundOrder order : orders) {
-            Map<String, Object> refundParams = new HashMap<>();
-            refundParams.put("refund_order_no", order.getRefundId());
-            Map<String, Object> refund = Refund.query(refundParams);
-            System.out.println(refund.get("refunds"));
+    public void verifyRefund() throws BaseAdaPayException {
+        List<AdaTrade> list = EasyExcel.read("/Users/drew/Downloads/1.xlsx")
+                .head(AdaTrade.class).sheet().doReadSync();
+        list = list.parallelStream().filter(adaTrade -> {
+            boolean success = false;
             try {
             try {
-                if (((JSONArray) refund.get("refunds")).getJSONObject(0).getString("trans_status").equals("S")) {
-                    success.add(order.getId());
-                } else {
-                    fail.add(order.getId());
+                Map<String, Object> refundParams = new HashMap<>(2);
+                refundParams.put("payment_id", adaTrade.get支付流水号());
+                Map<String, Object> refund = Refund.query(refundParams);
+                JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(refund));
+                if ("S".equals(jsonObject.getJSONArray("refunds")
+                        .getJSONObject(jsonObject.getJSONArray("refunds").size() - 1).getString("trans_status"))) {
+                    success = true;
                 }
                 }
             } catch (Exception e) {
             } catch (Exception e) {
-                fail.add(order.getId());
             }
             }
-        }
-        System.out.println("success:" + success.size());
-        System.out.println("fail:" + fail.size());
-        System.out.println(StringUtils.join(fail, ","));
+            return !success;
+        }).collect(Collectors.toList());
+        EasyExcel.write("/Users/drew/Downloads/2.xlsx", AdaTrade.class).sheet("模板").doWrite(list);
     }
     }
 
 
-    @Test
-    public void queryList() throws BaseAdaPayException {
-        Map<String, Object> paymentParams = new HashMap<>();
-        paymentParams.put("app_id", appId);
-        paymentParams.put("page_index", "1");
-        paymentParams.put("page_size", "10");
-        paymentParams.put("order_no", "928303191131422720");
-        Map<String, Object> paymentList = Payment.queryList(paymentParams);
-    }
 }
 }