|
|
@@ -0,0 +1,355 @@
|
|
|
+package com.ydtech.modules.ttqf;
|
|
|
+
|
|
|
+
|
|
|
+import cn.hutool.core.io.FileUtil;
|
|
|
+import cn.hutool.extra.spring.SpringUtil;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.ipaynow.jiaxin.TangClient;
|
|
|
+import com.ipaynow.jiaxin.domain.*;
|
|
|
+import com.ipaynow.jiaxin.request.*;
|
|
|
+import com.ipaynow.jiaxin.response.*;
|
|
|
+import com.ydtech.exception.SystemException;
|
|
|
+import com.ydtech.modules.admin.dao.SysUserBankCardMapper;
|
|
|
+import com.ydtech.modules.admin.model.po.SysUserBankCard;
|
|
|
+import com.ydtech.modules.esm.model.vo.EsmUserImageQueryVo;
|
|
|
+import com.ydtech.modules.esm.service.EsmUserImageService;
|
|
|
+import com.ydtech.modules.order.entity.api.bohai.constants.DocumentClass;
|
|
|
+import com.ydtech.modules.ttqf.service.PayUserSignService;
|
|
|
+import com.ydtech.utils.StringUtils;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.util.Base64Utils;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.io.IOException;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Objects;
|
|
|
+
|
|
|
+@Component
|
|
|
+@Slf4j
|
|
|
+public class RetrieveTTQFApi {
|
|
|
+
|
|
|
+
|
|
|
+ private static TangClient tangClient;
|
|
|
+
|
|
|
+ private static SavePayOrder savePayOrder;
|
|
|
+
|
|
|
+ private static PayUserSignService signService;
|
|
|
+
|
|
|
+ private static RegularlyPaymentStatus paymentStatus;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private void setSignService(PayUserSignService userSignService){
|
|
|
+ signService = userSignService;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private void setPaymentStatus(RegularlyPaymentStatus status){
|
|
|
+ paymentStatus = status;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private void setSavePayOrder(SavePayOrder order){
|
|
|
+ savePayOrder = order;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Resource(name = "tangClient")
|
|
|
+ private void setConfig(TangClient client){
|
|
|
+ tangClient = client;
|
|
|
+ }
|
|
|
+ public static String extractBalance(String userId,String decimal) throws Exception {
|
|
|
+ SysUserBankCard bankCard = SpringUtil.getBean(SysUserBankCardMapper.class).selectByIdPay("9914D1305");
|
|
|
+ signService.saveUserSign(bankCard.getUserId());
|
|
|
+ if (false){
|
|
|
+ //用户已经签约 进行打款操作
|
|
|
+ orderAdd(bankCard,new BigDecimal(decimal),"测试打款");
|
|
|
+ return "0";
|
|
|
+ } else {
|
|
|
+ // 未签约的用户先签约后进行打款
|
|
|
+ return pres(bankCard);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static boolean orderAdd(SysUserBankCard bankCard,BigDecimal amount,String remark){
|
|
|
+ OrderAddModel addModel = OrderAddModel.builder()
|
|
|
+ .mchBatchNo(System.currentTimeMillis() + "")
|
|
|
+ .mchOrderNo(GenerateOrderNumberUtils.nextNumber() + "")
|
|
|
+ //收款人姓名
|
|
|
+ .userName(bankCard.getUserName())
|
|
|
+ //收款人手机号
|
|
|
+ .userMobile(bankCard.getMobile())
|
|
|
+ //收款账号
|
|
|
+ .userBankCardNo(bankCard.getBankNumber())
|
|
|
+ //收款人身份证号
|
|
|
+ .userIdCardNo(bankCard.getIdentity())
|
|
|
+ //工作量衡量标准模板
|
|
|
+ .userWorkload("1849326302238785538")
|
|
|
+ //工作量衡量标准
|
|
|
+ .userWorkloadLevel(
|
|
|
+ "[{\"proj\":\"山西掌柜鼎科技有限公司\",\"std\":\"1\"}]"
|
|
|
+ )
|
|
|
+ //打款金额 Number(15,2)
|
|
|
+ // M 单位为元,风控可调额
|
|
|
+ .amount(amount)
|
|
|
+ .remark(remark)
|
|
|
+ //收款方式非必填:默认0-银行卡枚举:0-银行卡、1-支付宝、2-微信
|
|
|
+ .paymentType(0)
|
|
|
+ //选填项:微信APPID,若填写,以填写项稳准,否则应用预留配置的微信appid;该字段适用于同主体下含有多个公众号或小程序的场景
|
|
|
+ .wechatAppId("")
|
|
|
+ .build();
|
|
|
+ OrderAddResponse response = testOrderAdd(addModel, bankCard.getUserId());
|
|
|
+ if(response.isSuccess()) {
|
|
|
+ log.info("成功 ====>orderAdd {}", response.getResultModel());
|
|
|
+ } else {
|
|
|
+ log.error("失败 ====>orderAdd {}", response.getRespData());
|
|
|
+ }
|
|
|
+ return response.isSuccess();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 打款结果回调
|
|
|
+ */
|
|
|
+ private static void testOrderNotify() {
|
|
|
+ OrderNotifyRequest request = new OrderNotifyRequest();
|
|
|
+ OrderNotifyModel model = OrderNotifyModel.builder().orderId("czhl00000001")
|
|
|
+ .tradeTime(new Date()).tradeStatus("3").cardNo("1234567890").build();
|
|
|
+ request.setBizModel(model);
|
|
|
+ request.setRequestId(System.currentTimeMillis()+"");
|
|
|
+ OrderNotifyResponse response = tangClient.execute(request);
|
|
|
+ System.out.println(response);
|
|
|
+
|
|
|
+ System.out.println(response.getResultModel());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 图片上传接口
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ private static String testPictureUpload(String encodeBase64) throws IOException {
|
|
|
+ PictureUploadRequest request = new PictureUploadRequest();
|
|
|
+ PictureUploadModel model = PictureUploadModel.builder().picture(encodeBase64).build();
|
|
|
+ request.setBizModel(model);
|
|
|
+ request.setRequestId(System.currentTimeMillis()+"");
|
|
|
+ PictureUploadResponse response = tangClient.execute(request);
|
|
|
+ log.info(JSON.toJSONString(response));
|
|
|
+ return response.getResultModel().getFileId();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 账单下载接口
|
|
|
+ */
|
|
|
+ public static BillDownloadResponse billDownload(Integer type,String date) {
|
|
|
+ BillDownloadRequest request = new BillDownloadRequest();
|
|
|
+ BillDownloadModel model = BillDownloadModel.builder().type(type).date(date).build();
|
|
|
+ request.setBizModel(model);
|
|
|
+ request.setRequestId(System.currentTimeMillis()+"");
|
|
|
+ return tangClient.execute(request);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ *电子回执单瞎子啊接口
|
|
|
+ */
|
|
|
+ public static ReceiptlDownloadResponse receiptDownload(String mchOrderNo, String orderNo) {
|
|
|
+ ReceiptDownloadRequest request = new ReceiptDownloadRequest();
|
|
|
+ ReceiptDownloadModel model = ReceiptDownloadModel.builder().mchOrderNo(mchOrderNo).orderNo(orderNo).build();
|
|
|
+ request.setBizModel(model);
|
|
|
+ request.setRequestId(System.currentTimeMillis()+"");
|
|
|
+ return tangClient.execute(request);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 用户协议预览地址查询接口
|
|
|
+ */
|
|
|
+ private static void testPreview() {
|
|
|
+ PreviewRequest request = new PreviewRequest();
|
|
|
+ PreviewModel model = PreviewModel.builder().name("杨好晓").idCardNo("150525198909301678").build();
|
|
|
+ request.setBizModel(model);
|
|
|
+ request.setRequestId(System.currentTimeMillis() + "");
|
|
|
+ PreviewResponse response = tangClient.execute(request);
|
|
|
+ if(response.isSuccess()) {
|
|
|
+ log.info("成功 ====>Preview {}", response);
|
|
|
+ } else {
|
|
|
+ log.error("失败 ====>Preview {}", response);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 用户预签约接口
|
|
|
+ */
|
|
|
+ public static String pres(SysUserBankCard bankCard){
|
|
|
+ PresignRequest request = new PresignRequest();
|
|
|
+ List<EsmUserImageQueryVo> esmUserImageQueryVo = SpringUtil.getBean(EsmUserImageService.class).getEsmUserImageQueryVo(bankCard.getUserId());
|
|
|
+ if (CollectionUtils.isEmpty(esmUserImageQueryVo)){
|
|
|
+ throw new SystemException("用户影像资料不存在,请补全后在申请提现");
|
|
|
+ }
|
|
|
+ PresignModel presignModel = new PresignModel();
|
|
|
+ presignModel.setName(bankCard.getUserName());
|
|
|
+ presignModel.setMobile(bankCard.getMobile());
|
|
|
+ presignModel.setIdCardNo(bankCard.getIdentity());
|
|
|
+ presignModel.setBankCardNo(bankCard.getBankNumber());
|
|
|
+ if (bankCard.getIdentityTime().contains(",")){
|
|
|
+ presignModel.setExpiryStart(bankCard.getIdentityTime().split(",")[0]);
|
|
|
+ presignModel.setExpiryEnd(bankCard.getIdentityTime().split(",")[1]);
|
|
|
+ }else {
|
|
|
+ throw new SystemException("用户身份证有效日期不全,请检查");
|
|
|
+ }
|
|
|
+ presignModel.setNotifyUrl("");
|
|
|
+ for (EsmUserImageQueryVo item : esmUserImageQueryVo) {
|
|
|
+ try {
|
|
|
+ if (StringUtils.isEmpty(item.getPath())){
|
|
|
+ throw new SystemException("用户身份证影像资料不存在,请检查");
|
|
|
+ }
|
|
|
+ String encoded = Base64Utils.encodeToString(FileUtil.readBytes(item.getPath()));
|
|
|
+ if (StringUtils.isEmpty(encoded)){
|
|
|
+ throw new SystemException("用户身份证影像资料不存在或已删除,请刷新后重试");
|
|
|
+ }
|
|
|
+ if (DocumentClass.SFZ_01.getCode().equals(item.getType())){
|
|
|
+ presignModel.setIdCardPicAFileId(testPictureUpload(encoded));
|
|
|
+ }else if(DocumentClass.SFZ_02.getCode().equals(item.getType())){
|
|
|
+ presignModel.setIdCardPicBFileId(testPictureUpload(encoded));
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error("获取影像信息错误:{}",e.getMessage());
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+// PresignModel model = PresignModel.builder().name("杨晓").idCardNo("11010219900131252X").mobile("13092411724")
|
|
|
+// .bankCardNo("6225880165591124").expiryEnd("2030-03-18" ).expiryStart("2020-03-18").idCardPicAFileId("1362670410277076994").idCardPicBFileId("1362670410277076994").build();
|
|
|
+ request.setBizModel(presignModel);
|
|
|
+ request.setRequestId(System.currentTimeMillis() + "");
|
|
|
+ PresignResponse response = tangClient.execute(request);
|
|
|
+ if(response.isSuccess()) {
|
|
|
+ SpringUtil.getBean(LgInformationPush.class).push(bankCard.getUserId(),presignModel,esmUserImageQueryVo);
|
|
|
+ log.info("成功 ====>Pressing {}", response.getResultModel());
|
|
|
+ return contractH5();
|
|
|
+ } else {
|
|
|
+ log.error("失败{}", response);
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 用户预签约结果查询接口
|
|
|
+ */
|
|
|
+ public static boolean queryPressing(String idCardNo) {
|
|
|
+ QueryPresignResponse response = tangClient.execute(QueryPresignRequest.builder().requestId(System.currentTimeMillis() + "")
|
|
|
+ .bizModel(new QueryPresignModel(idCardNo)).build());
|
|
|
+ if(response.isSuccess()) {
|
|
|
+ QueryPresignResultModel resultModel = response.getResultModel();
|
|
|
+ if (Objects.equals(PayConstantStatus.SIGN_STATUS,resultModel.getSignStatus()) &&
|
|
|
+ Objects.equals(PayConstantStatus.AUTH_STATUS,resultModel.getAuthStatus())){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ log.info("成功 ====>QueryPressing {}", resultModel);
|
|
|
+ } else {
|
|
|
+ log.error("失败{}", response);
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 合同签约唤起接口
|
|
|
+ */
|
|
|
+ public static String contractH5() {
|
|
|
+ ContractH5Response response = tangClient.execute(ContractH5Request.builder()
|
|
|
+ .requestId(System.currentTimeMillis() + "").bizModel(ContractH5Model.builder()
|
|
|
+ .idCardNo("11010219900131252X").mchReturnUrl(PayConstantStatus.getUserSignNotifyUrl()).build())
|
|
|
+ .build());
|
|
|
+ if(response.isSuccess()) {
|
|
|
+ // 返回当前签约H5页面
|
|
|
+ String signUrl = response.getResultModel().getSignUrl();
|
|
|
+ log.info("成功 ====>ContractH5 {}", response.getResultModel());
|
|
|
+ return signUrl;
|
|
|
+ } else {
|
|
|
+ log.error("失败");
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 打款订单新增接口
|
|
|
+ */
|
|
|
+ public static OrderAddResponse testOrderAdd(OrderAddModel addModel,String userId) {
|
|
|
+ OrderAddRequest addRequest = OrderAddRequest.builder()
|
|
|
+ .requestId(System.currentTimeMillis() + "")
|
|
|
+ .bizModel(addModel)
|
|
|
+ .build();
|
|
|
+ OrderAddResponse response = tangClient.execute(addRequest);
|
|
|
+ boolean confirm = confirm(response.getResultModel().getOrderNo(),response.getResultModel().getBatchNo());
|
|
|
+ savePayOrder.savePayOrder(addRequest.getApiUrl(),response, JSONObject.toJSONString(addModel),JSONObject.toJSONString(response),userId, confirm);
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 订单取消接口
|
|
|
+ */
|
|
|
+ public static void testOrderCancel() {
|
|
|
+ OrderCancelResponse response = tangClient.execute(OrderCancelRequest.builder()
|
|
|
+ .requestId(System.currentTimeMillis() + "")
|
|
|
+ .bizModel(OrderCancelModel.builder().mchBatchNo("1584671697240")
|
|
|
+ .mchOrderNo("abc1111111114")
|
|
|
+ .orderNo("")
|
|
|
+ .build()).build());
|
|
|
+ if(response.isSuccess()) {
|
|
|
+ System.out.println("成功 ====>OrderCancel " + response.getResultModel());
|
|
|
+ } else {
|
|
|
+ System.out.println("失败 ====>OrderCancel " + response.getRespData());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 打款订单查询接口
|
|
|
+ */
|
|
|
+ public static OrderQueryResponse orderQuery(String orderNo) {
|
|
|
+ OrderQueryResponse response = tangClient.execute(OrderQueryRequest.builder()
|
|
|
+ .requestId(System.currentTimeMillis() + "")
|
|
|
+ .bizModel(OrderQueryModel.builder().mchOrderNo("").orderNo(orderNo).build())
|
|
|
+ .build());
|
|
|
+ if(response.isSuccess()) {
|
|
|
+ log.info("成功 ====>OrderQuery {}", response.getResultModel());
|
|
|
+ } else {
|
|
|
+ log.error("失败 ====>OrderQuery {}", response.getRespData());
|
|
|
+ }
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * \确认打款接口
|
|
|
+ */
|
|
|
+ public static boolean confirm(String orderNo,String batchNo) {
|
|
|
+ ConfirmRequest confirmRequest = ConfirmRequest.builder().requestId(System.currentTimeMillis() + "")
|
|
|
+ .bizModel(ConfirmModel.builder().mchBatchNo("").batchNo(batchNo).build()).build();
|
|
|
+ ConfirmResponse response = tangClient.execute(confirmRequest);
|
|
|
+ if(response.isSuccess()) {
|
|
|
+ log.info("成功 ====>Confirm{}", response.getResultModel());
|
|
|
+ paymentStatus.updatePaymentStatus(orderNo);
|
|
|
+ } else {
|
|
|
+ log.error("失败 ====>Confirm {}", response.getRespData());
|
|
|
+ }
|
|
|
+ savePayOrder.saveConfirm(response);
|
|
|
+ return response.isSuccess();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 商户余额查询接口
|
|
|
+ */
|
|
|
+ public static void testBalance() {
|
|
|
+ MerchantBalanceRequest balanceRequest = MerchantBalanceRequest.builder()
|
|
|
+ .requestId(System.currentTimeMillis() + "").bizModel(MerchantBalanceModel.builder().build())
|
|
|
+ .build();
|
|
|
+ MerchantBalanceResponse response = tangClient.execute(balanceRequest);
|
|
|
+ System.out.println(response);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|