xiongzhu 4 years ago
parent
commit
69acf916c4

+ 17 - 0
src/main/java/com/izouma/nineth/dto/adapay/DivMembersItem.java

@@ -0,0 +1,17 @@
+package com.izouma.nineth.dto.adapay;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+@Data
+public class DivMembersItem {
+
+    @JSONField(name = "member_id")
+    private String memberId;
+
+    @JSONField(name = "amount")
+    private String amount;
+
+    @JSONField(name = "fee_flag")
+    private String feeFlag;
+}

+ 88 - 0
src/main/java/com/izouma/nineth/dto/adapay/PaymentItem.java

@@ -0,0 +1,88 @@
+package com.izouma.nineth.dto.adapay;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PaymentItem {
+
+    @JSONField(name = "order_no")
+    private String orderNo;
+
+    @JSONField(name = "created_time")
+    private String createdTime;
+
+    @JSONField(name = "pay_amt")
+    private String payAmt;
+
+    @JSONField(name = "open_id")
+    private String openId;
+
+    @JSONField(name = "confirmed_amt")
+    private String confirmedAmt;
+
+    @JSONField(name = "end_time")
+    private String endTime;
+
+    @JSONField(name = "fee_mode")
+    private String feeMode;
+
+    @JSONField(name = "coupon_infos")
+    private String couponInfos;
+
+    @JSONField(name = "discount_amt")
+    private String discountAmt;
+
+    @JSONField(name = "cash_pay_amt")
+    private String cashPayAmt;
+
+    @JSONField(name = "reserved_amt")
+    private String reservedAmt;
+
+    @JSONField(name = "out_trans_id")
+    private String outTransId;
+
+    @JSONField(name = "party_order_id")
+    private String partyOrderId;
+
+    @JSONField(name = "pay_mode")
+    private String payMode;
+
+    @JSONField(name = "div_members")
+    private List<DivMembersItem> divMembers;
+
+    @JSONField(name = "refunded_amt")
+    private String refundedAmt;
+
+    @JSONField(name = "prod_mode")
+    private String prodMode;
+
+    @JSONField(name = "pay_channel")
+    private String payChannel;
+
+    @JSONField(name = "has_more")
+    private boolean hasMore;
+
+    @JSONField(name = "id")
+    private String id;
+
+    @JSONField(name = "app_id")
+    private String appId;
+
+    @JSONField(name = "fee_amt")
+    private String feeAmt;
+
+    @JSONField(name = "object")
+    private String object;
+
+    @JSONField(name = "status")
+    private String status;
+
+    @JSONField(name = "error_msg")
+    private String errorMsg;
+
+    @JSONField(name = "error_code")
+    private String errorCode;
+}

+ 28 - 0
src/main/java/com/izouma/nineth/dto/adapay/PaymentList.java

@@ -0,0 +1,28 @@
+package com.izouma.nineth.dto.adapay;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PaymentList {
+
+    @JSONField(name = "payments")
+    private List<PaymentItem> payments;
+
+    @JSONField(name = "prod_mode")
+    private String prodMode;
+
+    @JSONField(name = "has_more")
+    private boolean hasMore;
+
+    @JSONField(name = "app_id")
+    private String appId;
+
+    @JSONField(name = "object")
+    private String object;
+
+    @JSONField(name = "status")
+    private String status;
+}

+ 3 - 0
src/main/java/com/izouma/nineth/service/AdapayService.java

@@ -97,4 +97,7 @@ public class AdapayService {
             throw new BusinessException(errMsg + "(" + errCode + ")");
         }
     }
+
+    public void divRefund(String merchant, String appId) {
+    }
 }

+ 35 - 0
src/main/java/com/izouma/nineth/service/UserService.java

@@ -42,12 +42,14 @@ import org.springframework.context.event.EventListener;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.data.jpa.domain.Specification;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 
 import javax.persistence.criteria.Predicate;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
@@ -648,4 +650,37 @@ public class UserService {
         }
         return MapUtils.getString(res, "id");
     }
+
+    @Async
+    public void checkSettleAccountAsync() {
+        checkSettleAccount();
+    }
+
+    public void checkSettleAccount() {
+        List<User> list = userRepo.findBySettleAccountIdIsNotNull();
+        AtomicInteger count = new AtomicInteger();
+        list.forEach(user -> {
+            try {
+                IdentityAuth identityAuth = identityAuthRepo.findFirstByUserIdAndStatusAndDelFalseOrderByCreatedAtDesc(user.getId(), AuthStatus.SUCCESS)
+                        .orElseThrow(new BusinessException("用户未认证"));
+                UserBankCard userBankCard = userBankCardRepo.findByUserId(user.getId()).stream().findAny()
+                        .orElseThrow(new BusinessException("未绑卡"));
+                adapayMerchantService.createMemberForAll(
+                        user.getId().toString(), Optional.ofNullable(userBankCard.getPhone()).orElse(user.getPhone()),
+                        identityAuth.getRealName(), identityAuth.getIdNo());
+                adapayMerchantService.createSettleAccountForAll(
+                        user.getId().toString(), identityAuth.getRealName(),
+                        identityAuth.getIdNo(), Optional.ofNullable(userBankCard.getPhone()).orElse(user.getPhone()),
+                        userBankCard.getBankNo());
+                userBankCard.setPhone(Optional.ofNullable(userBankCard.getPhone()).orElse(user.getPhone()));
+                userBankCardRepo.save(userBankCard);
+            } catch (Exception e) {
+                user.setSettleAccountId(null);
+                userRepo.save(user);
+                userBankCardRepo.deleteByUserId(user.getId());
+            }
+            count.getAndIncrement();
+            log.info("checkSettleAccount {}/{}", count.get(), list.size());
+        });
+    }
 }

+ 3 - 3
src/main/java/com/izouma/nineth/web/UserController.java

@@ -253,9 +253,9 @@ public class UserController extends BaseController {
 
 
     @PreAuthorize("hasAnyRole('ADMIN')")
-    @GetMapping("/switchAccount")
-    public String switchAccount() {
-        userService.switchAccount();
+    @GetMapping("/checkSettleAccount")
+    public String checkSettleAccount() {
+        userService.checkSettleAccountAsync();
         return "ok";
     }
 }

+ 50 - 58
src/test/java/com/izouma/nineth/service/AdapayTest.java

@@ -7,9 +7,13 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.huifu.adapay.Adapay;
 import com.huifu.adapay.core.exception.BaseAdaPayException;
-import com.huifu.adapay.model.*;
-import com.izouma.nineth.dto.adapay.MemberInfo;
-import com.izouma.nineth.dto.adapay.SettleAccountsItem;
+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.izouma.nineth.dto.adapay.DivMembersItem;
+import com.izouma.nineth.dto.adapay.PaymentList;
+import com.izouma.nineth.dto.adapay.PaymentItem;
 import com.izouma.nineth.utils.SnowflakeIdWorker;
 import com.izouma.nineth.utils.excel.BigIntegerConverter;
 import com.izouma.nineth.utils.excel.LocalDateConverter;
@@ -26,14 +30,23 @@ import java.util.List;
 import java.util.Map;
 
 public class AdapayTest {
-    private final String appId = "app_843a743d-744e-4d73-bd60-3ebbee15d383";
+    private       String     appId    = "app_843a743d-744e-4d73-bd60-3ebbee15d383";
+    private final String[][] accounts = new String[][]{
+            {"mtws-a1", "app_843a743d-744e-4d73-bd60-3ebbee15d383", "api_live_c9db942a-b6d6-4cf7-b1b1-ec1e2873a7e7"},
+            {"mtws-a2", "app_dcf563b9-14cf-4583-a023-b41eb7a88f22", "api_live_ed24cd9d-b188-46dd-97f7-45e1000dc72d"},
+            {"mtws-a3", "app_7c2c29db-72d7-4215-ba56-99eacf28d7ee", "api_live_f77971eb-e816-4523-a41f-d4423526fb06"},
+            {"mtws-a4", "app_8d662b06-27e0-46c0-b7a0-6aaffa014a9b", "api_live_b692f68b-417f-4f1c-b9ff-568e8e9de6f2"},
+            {"mtws-a5", "app_f8760acc-f4d8-46f6-8f70-d80e36517075", "api_live_8818cac1-894b-40bc-ac77-803e02e9c260"},
+    };
 
     public AdapayTest() {
+        int account = 5;
         Adapay.debug = false;
         Adapay.prodMode = true;
 
+        appId = accounts[account - 1][1];
         MerConfig merConfig = new MerConfig();
-        merConfig.setApiKey("api_live_c9db942a-b6d6-4cf7-b1b1-ec1e2873a7e7");
+        merConfig.setApiKey(accounts[account - 1][2]);
         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");
@@ -206,68 +219,47 @@ public class AdapayTest {
 
     @Test
     public void singleQuery() throws BaseAdaPayException {
-        Map<String, Object> map = Payment.query("002112022030111361010344576731466739712");
+        Map<String, Object> map = Payment.query("002112022022700094210343679201843290112");
         System.out.println(JSON.toJSONString(map, SerializerFeature.PrettyFormat));
     }
 
     @Test
-    public void createmember() throws BaseAdaPayException {
-        Map<String, Object> memberParams = new HashMap<String, Object>(7);
-        memberParams.put("member_id", "member_id_test");
-        memberParams.put("app_id", appId);
-        memberParams.put("location", "上海市徐汇区宜山路700号");
-        memberParams.put("email", "123@163.com");
-        memberParams.put("gender", "MALE");
-        memberParams.put("tel_no", "13153333333");
-        memberParams.put("nickname", "nick_name");
-        Map<String, Object> member = Member.create(memberParams);
-        System.out.println(JSON.toJSONString(member, SerializerFeature.PrettyFormat));
-
-        Map<String, Object> settleCountParams = new HashMap<>();
-        Map<String, Object> accountInfo = new HashMap<>();
-        accountInfo.put("card_id", "6222024301070380165");
-        accountInfo.put("card_name", "熊竹");
-        accountInfo.put("cert_id", "321002199408304614");
-        accountInfo.put("cert_type", "00");
-        accountInfo.put("tel_no", "15077886171");
-        accountInfo.put("bank_acct_type", "2");
-        settleCountParams.put("member_id", "member_id_test");
-        settleCountParams.put("app_id", appId);
-        settleCountParams.put("channel", "bank_account");
-        settleCountParams.put("account_info", accountInfo);
-        Map<String, Object> settleCount = SettleAccount.create(settleCountParams);
-        System.out.println(JSON.toJSONString(member, SerializerFeature.PrettyFormat));
+    public void listQuery() throws BaseAdaPayException {
+        Map<String, Object> paymentParams = new HashMap<>();
+        paymentParams.put("app_id", appId);
+        paymentParams.put("payment_id", "002112022022700094210343679201843290112");
+        Map<String, Object> res = Payment.queryList(paymentParams);
+        System.out.println(JSON.toJSONString(res, SerializerFeature.PrettyFormat));
+        PaymentList paymentList = JSON.parseObject(JSON.toJSONString(res), PaymentList.class);
+        if (paymentList.getPayments() != null) {
+            PaymentItem paymentItem = paymentList.getPayments().get(0);
+            if (paymentItem.getDivMembers() != null && paymentItem.getDivMembers().size() > 1) {
+                DivMembersItem item = paymentItem.getDivMembers().stream().filter(d -> !d.getMemberId().equals("0"))
+                        .findAny().get();
+
+
+            }
+        }
     }
 
-    @Test
-    public void queryMember() throws BaseAdaPayException {
-        Map<String, Object> memberParams = new HashMap<String, Object>(2);
-        memberParams.put("member_id", "test0301");
-        memberParams.put("app_id", appId);
-        Map<String, Object> member = Member.query(memberParams);
-        System.out.println(JSON.toJSONString(member, SerializerFeature.PrettyFormat));
-        MemberInfo m = JSON.parseObject(JSON.toJSONString(member), MemberInfo.class);
-        System.out.println(m);
 
+    public void balancePay(String from, String to, String amount) throws BaseAdaPayException {
+        Map<String, Object> balanceParam = new HashMap<String, Object>(4);
+        balanceParam.put("app_id", appId);
+        balanceParam.put("adapay_func_code", "settle_accounts.balancePay");
+        balanceParam.put("order_no", new SnowflakeIdWorker(0, 0).nextId() + "");
+        balanceParam.put("out_member_id", from);
+        balanceParam.put("in_member_id", to);
+        balanceParam.put("trans_amt", amount);
+        balanceParam.put("goods_title", "一双鞋子");
+        balanceParam.put("goods_desc", "一双鞋子啊");
+
+        Map<String, Object> paymentResult = AdapayCommon.requestAdapay(balanceParam);
+        System.out.println(JSON.toJSONString(paymentResult, SerializerFeature.PrettyFormat));
     }
 
     @Test
-    public void delSettleAccount() throws BaseAdaPayException {
-        String memberId = "test0301";
-        Map<String, Object> memberParams = new HashMap<>();
-        memberParams.put("member_id", memberId);
-        memberParams.put("app_id", appId);
-        Map<String, Object> member = Member.query(memberParams);
-        MemberInfo memberInfo = JSON.parseObject(JSON.toJSONString(member), MemberInfo.class);
-        if (memberInfo.getSettleAccounts() != null && memberInfo.getSettleAccounts().size() > 0) {
-            SettleAccountsItem settleAccountsItem = memberInfo.getSettleAccounts().get(0);
-            Map<String, Object> settleCountParams = new HashMap<>();
-            settleCountParams.put("settle_account_id", settleAccountsItem.getId());
-            settleCountParams.put("member_id", memberId);
-            settleCountParams.put("app_id", appId);
-            Map<String, Object> settleCount = SettleAccount.delete(settleCountParams);
-            System.out.println(JSON.toJSONString(settleCount, SerializerFeature.PrettyFormat));
-        }
+    public void testbalancePay() throws BaseAdaPayException {
+        balancePay("8635", "3896", "0.01");
     }
-
 }