From 94b6015d7e4b5b93452244073cab8d08ecb2d442 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Thu, 25 Aug 2022 16:04:43 +0800
Subject: [PATCH] 20220822

---
 src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java                          |    6 ++
 src/main/java/cc/mrbird/febs/pay/service/impl/UnipayServiceImpl.java            |   23 ++++++-
 src/main/java/cc/mrbird/febs/pay/service/UnipayService.java                     |   12 +++
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java |   68 ++++++++++++++--------
 src/main/java/cc/mrbird/febs/pay/model/AgreeMentPaySmsDto.java                  |   13 ++-
 src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java               |    9 ++
 6 files changed, 92 insertions(+), 39 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java b/src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java
index 9d2094f..e2b1290 100644
--- a/src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java
+++ b/src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java
@@ -31,4 +31,10 @@
 
     @ApiModelProperty(value = "支付凭证")
     private String payImage;
+
+    @ApiModelProperty(value = "签约短信验证码")
+    private String smsCode;
+
+    @ApiModelProperty(value = "银行卡号")
+    private String bankNo;
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index 2f2ff02..fa7e82e 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -17,6 +17,7 @@
 import cc.mrbird.febs.mall.vo.OrderDetailVo;
 import cc.mrbird.febs.mall.vo.OrderListVo;
 import cc.mrbird.febs.mall.vo.OrderRefundVo;
+import cc.mrbird.febs.pay.model.AgreementPayDto;
 import cc.mrbird.febs.pay.model.AgreementSignDto;
 import cc.mrbird.febs.pay.model.UnipayDto;
 import cc.mrbird.febs.pay.service.IPayService;
@@ -39,6 +40,7 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.text.DecimalFormat;
 import java.util.*;
 
 /**
@@ -257,7 +259,7 @@
                 if("fail" == unipayStr){
                     throw new FebsException("支付失败");
                 }else{
-                    JSONUtil.parseObj(unipayStr);
+//                    JSONUtil.parseObj(unipayStr);
                     JSONObject jsonObject = JSONUtil.parseObj(unipayStr);
                     payResultStr = (String) jsonObject.get("r7_TrxNo");
                     rcResult = (String) jsonObject.get("rc_Result");
@@ -333,31 +335,45 @@
             case "5":
                 AgreementSignDto agreementSignDto = new AgreementSignDto();
                 agreementSignDto.setOrderNo(orderInfo.getOrderNo());
-                unipayService.agreementSign(agreementSignDto);
-//                UnipayDto unipayDto = new UnipayDto();
-////                unipayDto.setAmount(new BigDecimal("0.01"));
-//                unipayDto.setAmount(orderInfo.getAmount());
-//                unipayDto.setFrpCode("ALIPAY_H5");
-//                unipayDto.setTradeMerchantNo("777180800385820");
-//                unipayDto.setOrderNo(orderInfo.getOrderNo());
-//                List<MallOrderItem> items = orderInfo.getItems();
-//                if(CollUtil.isEmpty(items)){
-//                    unipayDto.setProductName("商品");
-//                }else{
-//                    unipayDto.setProductName(items.get(0).getGoodsName());
-//                }
-//                String agreementSignStr = "";
-//                if("fail" == unipayStr){
-//                    throw new FebsException("支付失败");
-//                }else{
-//                    JSONUtil.parseObj(unipayStr);
-//                    JSONObject jsonObject = JSONUtil.parseObj(unipayStr);
-//                    payResultStr = (String) jsonObject.get("r7_TrxNo");
-//                    rcResult = (String) jsonObject.get("rc_Result");
-//                }
-                orderInfo.setPayOrderNo(payResultStr);
-                orderInfo.setPayMethod("支付宝支付");
-//                agentProducer.sendOrderReturn(orderInfo.getId());
+                agreementSignDto.setSmsCode(payOrderDto.getSmsCode());
+                String agreementSignStr = unipayService.agreementSign(agreementSignDto);
+                if("fail" == agreementSignStr){
+                    throw new FebsException("支付失败");
+                }else{
+                    JSONObject jsonObject = JSONUtil.parseObj(agreementSignStr);
+                    payResultStr = (String) jsonObject.get("biz_code");
+                    if("JS000000" != payResultStr){
+                        throw new FebsException("支付失败");
+                    }
+                }
+                
+                AgreementPayDto agreementPayDto = new AgreementPayDto();
+                agreementPayDto.setOrderNo(orderInfo.getOrderNo());
+
+                BigDecimal value = orderInfo.getAmount().setScale(2, BigDecimal.ROUND_DOWN);
+                DecimalFormat decimalFormat = new DecimalFormat("0.00#");
+                String strVal = decimalFormat.format(value);
+                agreementPayDto.setOrderAmount(new BigDecimal(strVal));
+                agreementPayDto.setOrderTime(DateUtil.now());
+                List<MallOrderItem> itemsGoods = orderInfo.getItems();
+                if(CollUtil.isEmpty(itemsGoods)){
+                    agreementPayDto.setOrderDesc("商品");
+                }else{
+                    agreementPayDto.setOrderDesc(itemsGoods.get(0).getGoodsName());
+                }
+                agreementPayDto.setBankNo(payOrderDto.getBankNo());
+                String agreementPayStr = unipayService.agreementPay(agreementPayDto);
+
+                if("fail".equals(agreementSignStr)){
+                    throw new FebsException("支付失败");
+                }else{
+                    JSONObject jsonObject = JSONUtil.parseObj(agreementPayStr);
+                    payResultStr = (String) jsonObject.get("biz_code");
+                    if(!"JS000000".equals(payResultStr)){
+                        throw new FebsException("支付失败");
+                    }
+                }
+                orderInfo.setPayMethod("快捷协议支付");
                 break;
             default:
 
diff --git a/src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java b/src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java
index 2a7eada..7a7f3e4 100644
--- a/src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java
+++ b/src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java
@@ -153,8 +153,12 @@
     @ApiOperation(value = "获取协议支付签约短信", notes = "获取协议支付签约短信")
     @PostMapping(value = "getAgreeMentPaySms")
     public FebsResponse getAgreeMentPaySms(@RequestBody AgreeMentPaySmsDto agreeMentPaySmsDto) {
-        unipayService.getAgreeMentPaySms(agreeMentPaySmsDto);
-        return new FebsResponse().success().message("申请成功");
+        String agreeMentPaySms = unipayService.getAgreeMentPaySms(agreeMentPaySmsDto);
+        if("fail".equals(agreeMentPaySms)){
+            return new FebsResponse().fail().message("获取失败");
+        }else{
+            return new FebsResponse().success().message("获取成功");
+        }
     }
 
 //    public static void main(String[] args) {
@@ -186,6 +190,7 @@
                     orderInfo.setPayResult("1");
                     orderInfo.setPayTime(DateUtil.parse(pay_success_time));
                     orderInfo.setPayTradeNo(jp_order_no);
+                    orderInfo.setPayOrderNo(orderNo);
                     orderInfoMapper.updateById(orderInfo);
 
                     boolean hasTc = false;
diff --git a/src/main/java/cc/mrbird/febs/pay/model/AgreeMentPaySmsDto.java b/src/main/java/cc/mrbird/febs/pay/model/AgreeMentPaySmsDto.java
index c166a1a..4dbf055 100644
--- a/src/main/java/cc/mrbird/febs/pay/model/AgreeMentPaySmsDto.java
+++ b/src/main/java/cc/mrbird/febs/pay/model/AgreeMentPaySmsDto.java
@@ -2,6 +2,7 @@
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -12,20 +13,22 @@
 public class AgreeMentPaySmsDto {
 
     // 商户订单号
+
+    @ApiModelProperty(value = "订单号")
     private String orderNo;
-    // 订单金额;金额保留两位小数
-    private BigDecimal orderAmount;
-    //创建时间
-//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private String createdTime;
     // 姓名
+    @ApiModelProperty(value = "姓名")
     private String name;
     //证件类型
+    @ApiModelProperty(value = "证件类型")
     private String idType;
     //证件号码
+    @ApiModelProperty(value = "证件号码")
     private String idCardNum;
     // 银行卡号
+    @ApiModelProperty(value = "银行卡号")
     private String bankNo;
     // 手机号
+    @ApiModelProperty(value = "手机号")
     private String phone;
 }
diff --git a/src/main/java/cc/mrbird/febs/pay/service/UnipayService.java b/src/main/java/cc/mrbird/febs/pay/service/UnipayService.java
index 549ced2..b61ed57 100644
--- a/src/main/java/cc/mrbird/febs/pay/service/UnipayService.java
+++ b/src/main/java/cc/mrbird/febs/pay/service/UnipayService.java
@@ -6,10 +6,20 @@
 import cc.mrbird.febs.pay.model.UnipayDto;
 
 public interface UnipayService {
-
+    /**
+     * 聚合支付-微信支付宝
+     * @param unipayDto
+     * @return
+     */
     String unipay(UnipayDto unipayDto);
 
     /**
+     * 协议快捷支付步骤
+     * 1快捷协议支付-签约短信接口
+     * 2快捷协议支付-签约接口
+     * 3快捷协议支付-无短支付接口
+     */
+    /**
      * 快捷协议支付-签约短信接口
      * @param agreeMentPaySmsDto
      * @return
diff --git a/src/main/java/cc/mrbird/febs/pay/service/impl/UnipayServiceImpl.java b/src/main/java/cc/mrbird/febs/pay/service/impl/UnipayServiceImpl.java
index 65e9a09..fc530b3 100644
--- a/src/main/java/cc/mrbird/febs/pay/service/impl/UnipayServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/pay/service/impl/UnipayServiceImpl.java
@@ -1,14 +1,18 @@
 package cc.mrbird.febs.pay.service.impl;
 
+import cc.mrbird.febs.mall.entity.MallOrderInfo;
+import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
 import cc.mrbird.febs.pay.model.*;
 import cc.mrbird.febs.pay.service.UnipayService;
 import cc.mrbird.febs.pay.util.*;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.digest.DigestUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -44,6 +48,9 @@
     public static final String agreementPayNotifyUrl = "http://47.111.90.145:8800/api/unipay/agreementPayCallBack";
     public static final String p1MerchantNo = "888118000001971";/** 商户编号 */
     public static final String aesKey = "1234567891234567";/** 商户编号 */
+
+    @Autowired
+    private MallOrderInfoMapper orderInfoMapper;
 
     @Override
     @Transactional
@@ -180,7 +187,7 @@
         map.put("mch_order_no",agreementPayDto.getOrderNo()); // 商户订单号
         map.put("order_amount", agreementPayDto.getOrderAmount()); // 订单金额;金额保留两位小数
         map.put("mch_req_time", agreementPayDto.getOrderTime()); // 订单时间
-        map.put("order_desc", agreementPayDto.getOrderDesc()); // 订单时间
+        map.put("order_desc", agreementPayDto.getOrderDesc()); // 商品名称
         map.put("callback_url", agreementPayNotifyUrl); // 异步通知地址
         map.put("bank_card_no",  AESUtil.Aes256Encode(agreementPayDto.getBankNo(),aesKey)); // 签约银行卡号
 
@@ -250,9 +257,15 @@
             e.printStackTrace();
         }
 
-        map.put("mch_order_no", "NO_"+agreeMentPaySmsDto.getOrderNo()); // 商户订单号
-        map.put("order_amount", agreeMentPaySmsDto.getOrderAmount()); // 订单金额
-        map.put("mch_req_time", agreeMentPaySmsDto.getCreatedTime()); // 下单时间
+
+        MallOrderInfo orderInfo = orderInfoMapper.selectByOrderNo(agreeMentPaySmsDto.getOrderNo());
+        map.put("mch_order_no", "NO_"+orderInfo.getOrderNo()); // 商户订单号
+
+        BigDecimal value = orderInfo.getAmount().setScale(2, BigDecimal.ROUND_DOWN);
+        DecimalFormat decimalFormat = new DecimalFormat("0.00#");
+        String strVal = decimalFormat.format(value);
+        map.put("order_amount", strVal); // 订单金额
+        map.put("mch_req_time", DateUtil.now()); // 下单时间
         map.put("payer_name",AESUtil.Aes256Encode(agreeMentPaySmsDto.getName(),aesKey)); // 姓名
         map.put("id_type", agreeMentPaySmsDto.getIdType()); // 证件类型
         map.put("id_no", AESUtil.Aes256Encode(agreeMentPaySmsDto.getIdCardNum(),aesKey)); // 证件号码
@@ -323,7 +336,7 @@
             e.printStackTrace();
         }
 
-        map.put("mch_order_no", agreementSignDto.getOrderNo()); // 商户订单号
+        map.put("mch_order_no",  "NO_"+agreementSignDto.getOrderNo()); // 商户订单号
         map.put("sms_code", agreementSignDto.getSmsCode()); // 签约短信验证码
 
         requestParam.setData(JsonUtil.toString(map));

--
Gitblit v1.9.1