瀏覽代碼

fixed 会员等级问题、云闪付支付功能迭代

fushengqian 2 月之前
父節點
當前提交
c0f91c55f4

+ 1 - 1
fuint-application/src/main/java/com/fuint/common/dto/UserDto.java

@@ -50,7 +50,7 @@ public class UserDto implements Serializable {
     private String idcard;
 
     @ApiModelProperty("等级ID")
-    private String gradeId;
+    private Integer gradeId;
 
     @ApiModelProperty("等级名称")
     private String gradeName;

+ 2 - 1
fuint-application/src/main/java/com/fuint/common/enums/PayTypeEnum.java

@@ -19,7 +19,8 @@ public enum PayTypeEnum {
     MICROPAY("MICROPAY", "微信扫码支付"),
     BALANCE("BALANCE", "余额支付"),
     ALISCAN("ALISCAN", "支付宝扫码"),
-    STORE("STORE", "门店支付");
+    STORE("STORE", "门店支付"),
+    UNIONPAY("UNIONPAY", "云闪付支付");
 
     private String key;
 

+ 62 - 0
fuint-application/src/main/java/com/fuint/common/service/UnionPayService.java

@@ -0,0 +1,62 @@
+package com.fuint.common.service;
+
+import com.fuint.framework.exception.BusinessCheckException;
+import com.fuint.framework.web.ResponseObject;
+import com.fuint.repository.model.MtOrder;
+import com.fuint.repository.model.MtUser;
+import java.math.BigDecimal;
+import java.util.Map;
+
+/**
+ * 云闪付相关业务接口
+ *
+ * Created by FSQ
+ * CopyRight https://www.fuint.cn
+ */
+public interface UnionPayService {
+
+    /**
+     * 创建预支付订单
+     *
+     * @param userInfo 会员信息
+     * @param orderInfo 订单信息
+     * @param payAmount 支付金额
+     * @param authCode 付款码
+     * @param giveAmount 赠送金额
+     * @param ip 支付IP地址
+     * @param platform 支付平台
+     * @return
+     * */
+    ResponseObject createPrepayOrder(MtUser userInfo, MtOrder orderInfo, Integer payAmount, String authCode, Integer giveAmount, String ip, String platform) throws BusinessCheckException;
+
+    /**
+     * 支付回调
+     *
+     * @param params 请求参数
+     * @return
+     * */
+    Boolean checkCallBack(Map<String, String> params) throws Exception;
+
+    /**
+     * 查询支付订单
+     *
+     * @param storeId 店铺ID
+     * @param tradeNo 交易单号
+     * @param orderSn 订单号
+     * @return
+     * */
+    Map<String, String> queryPaidOrder(Integer storeId, String tradeNo, String orderSn) throws BusinessCheckException;
+
+    /**
+     * 发起售后退款
+     *
+     * @param storeId 店铺ID
+     * @param orderSn 订单号
+     * @param totalAmount 订单总金额
+     * @param refundAmount 售后金额
+     * @param platform 订单平台
+     * @return
+     * */
+    Boolean doRefund(Integer storeId, String orderSn, BigDecimal totalAmount, BigDecimal refundAmount, String platform) throws BusinessCheckException;
+
+}

+ 3 - 3
fuint-application/src/main/java/com/fuint/common/service/impl/CouponServiceImpl.java

@@ -915,12 +915,12 @@ public class CouponServiceImpl extends ServiceImpl<MtCouponMapper, MtCoupon> imp
         // 判断适用会员等级
         if (userCoupon.getUserId() != null && userCoupon.getUserId() > 0 && StringUtil.isNotEmpty(couponInfo.getGradeIds())) {
             MtUser mtUser = memberService.queryMemberById(userCoupon.getUserId());
-            if (StringUtil.isEmpty(mtUser.getGradeId())) {
+            if (mtUser.getGradeId() == null) {
                 MtUserGrade defaultGrade = userGradeService.getInitUserGrade(mtUser.getMerchantId());
                 if (defaultGrade != null) {
-                    mtUser.setGradeId(defaultGrade.getId().toString());
+                    mtUser.setGradeId(defaultGrade.getId());
                 } else {
-                    mtUser.setGradeId("0");
+                    mtUser.setGradeId(0);
                 }
             }
             String[] gradeIds = couponInfo.getGradeIds().split(",");

+ 3 - 1
fuint-application/src/main/java/com/fuint/common/service/impl/GiveServiceImpl.java

@@ -184,7 +184,9 @@ public class GiveServiceImpl extends ServiceImpl<MtGiveMapper, MtGive> implement
             userInfo.setName(mobile);
             userInfo.setMobile(mobile);
             MtUserGrade grade = userGradeService.getInitUserGrade(merchantId);
-            userInfo.setGradeId(grade.getId()+"");
+            if (grade != null) {
+                userInfo.setGradeId(grade.getId());
+            }
             userInfo.setBalance(new BigDecimal(0));
             userInfo.setStatus(StatusEnum.ENABLED.getKey());
             user = memberService.addMember(userInfo, "0");

+ 17 - 22
fuint-application/src/main/java/com/fuint/common/service/impl/MemberServiceImpl.java

@@ -316,7 +316,7 @@ public class MemberServiceImpl extends ServiceImpl<MtUserMapper, MtUser> impleme
             }
             if (userDto.getGradeId() != null) {
                 Integer mchId = StringUtil.isNotEmpty(merchantId) ? Integer.parseInt(merchantId) : 0;
-                MtUserGrade mtGrade = userGradeService.queryUserGradeById(mchId, Integer.parseInt(userDto.getGradeId()), mtUser.getId());
+                MtUserGrade mtGrade = userGradeService.queryUserGradeById(mchId, userDto.getGradeId(), mtUser.getId());
                 if (mtGrade != null) {
                     userDto.setGradeName(mtGrade.getName());
                 }
@@ -375,10 +375,10 @@ public class MemberServiceImpl extends ServiceImpl<MtUserMapper, MtUser> impleme
             mtUser.setName(userNo);
         }
         // 默认会员等级
-        if (StringUtil.isEmpty(mtUser.getGradeId())) {
+        if (mtUser.getGradeId() == null) {
             MtUserGrade grade = userGradeService.getInitUserGrade(mtUser.getMerchantId());
             if (grade != null) {
-                mtUser.setGradeId(grade.getId().toString());
+                mtUser.setGradeId(grade.getId());
             }
         }
         mtUser.setUserNo(userNo);
@@ -424,7 +424,7 @@ public class MemberServiceImpl extends ServiceImpl<MtUserMapper, MtUser> impleme
         mtUser = queryMemberById(mtUser.getId());
 
         // 开卡赠礼
-        openGiftService.openGift(mtUser.getId(), Integer.parseInt(mtUser.getGradeId()), true);
+        openGiftService.openGift(mtUser.getId(), mtUser.getGradeId(), true);
 
         // 分佣关系
         commissionRelationService.setCommissionRelation(mtUser, shareId);
@@ -461,11 +461,6 @@ public class MemberServiceImpl extends ServiceImpl<MtUserMapper, MtUser> impleme
         mtUser.setUpdateTime(new Date());
 
         MtUser oldUserInfo = mtUserMapper.selectById(mtUser.getId());
-        if (mtUser.getGradeId() != null && StringUtil.isNotEmpty(mtUser.getGradeId())) {
-            if (!CommonUtil.isNumeric(mtUser.getGradeId())) {
-                throw new BusinessCheckException("该会员等级有误");
-            }
-        }
         String mobile = mtUser.getMobile();
         if (PhoneFormatCheckUtils.isChinaPhoneLegal(mobile)) {
             mtUserMapper.resetMobile(mtUser.getMerchantId(), mobile, mtUser.getId());
@@ -489,7 +484,7 @@ public class MemberServiceImpl extends ServiceImpl<MtUserMapper, MtUser> impleme
             mtUser.setSalt(salt);
             mtUser.setPassword(enCodePassword(mtUser.getPassword(), salt));
         }
-        String gradeId = mtUser.getGradeId();
+        Integer gradeId = mtUser.getGradeId();
         mtUser.setGradeId(oldUserInfo.getGradeId());
         mtUser.setMerchantId(oldUserInfo.getMerchantId());
         if (mtUser.getStoreId() == null || mtUser.getStoreId() <= 0) {
@@ -499,7 +494,7 @@ public class MemberServiceImpl extends ServiceImpl<MtUserMapper, MtUser> impleme
         if (result && mtUser.getGradeId() != null) {
             // 修改了会员等级,开卡赠礼
             if (!gradeId.equals(oldUserInfo.getGradeId())) {
-                openGiftService.openGift(mtUser.getId(), Integer.parseInt(gradeId), false);
+                openGiftService.openGift(mtUser.getId(), gradeId, false);
             }
         }
         return mtUser;
@@ -526,7 +521,7 @@ public class MemberServiceImpl extends ServiceImpl<MtUserMapper, MtUser> impleme
         mtUser.setMobile(mobile);
         MtUserGrade grade = userGradeService.getInitUserGrade(merchantId);
         if (grade != null) {
-            mtUser.setGradeId(grade.getId() + "");
+            mtUser.setGradeId(grade.getId());
         }
         Date time = new Date();
         mtUser.setCreateTime(time);
@@ -544,7 +539,7 @@ public class MemberServiceImpl extends ServiceImpl<MtUserMapper, MtUser> impleme
         mtUser = queryMemberByMobile(merchantId, mobile);
 
         // 开卡赠礼
-        openGiftService.openGift(mtUser.getId(), Integer.parseInt(mtUser.getGradeId()), true);
+        openGiftService.openGift(mtUser.getId(), mtUser.getGradeId(), true);
 
         // 分佣关系
         commissionRelationService.setCommissionRelation(mtUser, shareId);
@@ -613,22 +608,22 @@ public class MemberServiceImpl extends ServiceImpl<MtUserMapper, MtUser> impleme
                     Date now = new Date();
                     if (endTime.before(now)) {
                         if (!mtUser.getGradeId().equals(initGrade.getId())) {
-                            mtUser.setGradeId(initGrade.getId().toString());
+                            mtUser.setGradeId(initGrade.getId());
                             updateById(mtUser);
                         }
                     }
                 }
                 // 会员等级为空,就把会员等级置为初始等级
-                String userGradeId = mtUser.getGradeId();
+                Integer userGradeId = mtUser.getGradeId();
                 if (userGradeId == null && initGrade != null) {
-                    mtUser.setGradeId(initGrade.getId().toString());
+                    mtUser.setGradeId(initGrade.getId());
                     updateById(mtUser);
                     openGiftService.openGift(mtUser.getId(), initGrade.getId(), false);
                 } else {
                     // 会员等级不存在或已禁用、删除,就把会员等级置为初始等级
-                    MtUserGrade myGrade = userGradeService.queryUserGradeById(mtUser.getMerchantId(), Integer.parseInt(userGradeId), id);
+                    MtUserGrade myGrade = userGradeService.queryUserGradeById(mtUser.getMerchantId(), userGradeId, id);
                     if (myGrade == null || !myGrade.getStatus().equals(StatusEnum.ENABLED.getKey())) {
-                        mtUser.setGradeId(initGrade.getId().toString());
+                        mtUser.setGradeId(initGrade.getId());
                         updateById(mtUser);
                     }
                 }
@@ -734,7 +729,7 @@ public class MemberServiceImpl extends ServiceImpl<MtUserMapper, MtUser> impleme
             mtUser.setOpenId(openId);
             MtUserGrade grade = userGradeService.getInitUserGrade(merchantId);
             if (grade != null) {
-                mtUser.setGradeId(grade.getId() + "");
+                mtUser.setGradeId(grade.getId());
             }
             Date time = new Date();
             mtUser.setUpdateTime(time);
@@ -767,7 +762,7 @@ public class MemberServiceImpl extends ServiceImpl<MtUserMapper, MtUser> impleme
             user = mtUserMapper.queryMemberByOpenId(merchantId, openId);
 
             // 开卡赠礼
-            openGiftService.openGift(user.getId(), Integer.parseInt(user.getGradeId()), true);
+            openGiftService.openGift(user.getId(), user.getGradeId(), true);
 
             // 分佣关系
             commissionRelationService.setCommissionRelation(mtUser, shareId);
@@ -1089,11 +1084,11 @@ public class MemberServiceImpl extends ServiceImpl<MtUserMapper, MtUser> impleme
                  mtUser.setDescription(userInfo.get(6));
                  mtUser.setCarNo(userInfo.get(7));
                  String gradeName = userInfo.get(8);
-                 String gradeId = "0";
+                 Integer gradeId = 0;
                  if (StringUtil.isNotEmpty(gradeName)) {
                      for (MtUserGrade userGrade : userGrades) {
                           if (userGrade.getName().equals(gradeName)) {
-                              gradeId = userGrade.getId().toString();
+                              gradeId = userGrade.getId();
                           }
                      }
                  }

+ 4 - 4
fuint-application/src/main/java/com/fuint/common/service/impl/OpenGiftServiceImpl.java

@@ -252,10 +252,10 @@ public class OpenGiftServiceImpl extends ServiceImpl<MtOpenGiftMapper, MtOpenGif
         if (user.getIsStaff().equals(YesOrNoEnum.YES.getKey())) {
             return false;
         }
-        if (user.getGradeId() == null && StringUtil.isEmpty(user.getGradeId())) {
-            user.setGradeId("0");
+        if (user.getGradeId() == null) {
+            user.setGradeId(0);
         }
-        MtUserGrade oldGrade = userGradeService.queryUserGradeById(user.getMerchantId(), Integer.parseInt(user.getGradeId()), user.getId());
+        MtUserGrade oldGrade = userGradeService.queryUserGradeById(user.getMerchantId(), user.getGradeId(), user.getId());
         MtUserGrade gradeInfo = userGradeService.queryUserGradeById(user.getMerchantId(), gradeId, user.getId());
         // 设置有效期
         if (gradeInfo.getValidDay() >= 0) {
@@ -271,7 +271,7 @@ public class OpenGiftServiceImpl extends ServiceImpl<MtOpenGiftMapper, MtOpenGif
                 user.setEndTime(null);
             }
         }
-        user.setGradeId(gradeId.toString());
+        user.setGradeId(gradeId);
         user.setUpdateTime(new Date());
         mtUserMapper.updateById(user);
         // 会员往低了改变,没有开卡赠礼

+ 3 - 3
fuint-application/src/main/java/com/fuint/common/service/impl/OrderServiceImpl.java

@@ -408,7 +408,7 @@ public class OrderServiceImpl extends ServiceImpl<MtOrderMapper, MtOrder> implem
 
         // 会员相关信息
         MtUser userInfo = memberService.queryMemberById(orderDto.getUserId());
-        MtUserGrade userGrade = userGradeService.queryUserGradeById(orderDto.getMerchantId(), userInfo.getGradeId() != null ? Integer.parseInt(userInfo.getGradeId()) : 1, orderDto.getUserId());
+        MtUserGrade userGrade = userGradeService.queryUserGradeById(orderDto.getMerchantId(), userInfo.getGradeId() != null ? userInfo.getGradeId() : 1, orderDto.getUserId());
         BigDecimal percent = new BigDecimal("0");
         if (userGrade != null && userGrade.getDiscount() != null && userGrade.getDiscount() > 0 && !userInfo.getIsStaff().equals(YesOrNoEnum.YES.getKey())) {
             // 会员折扣
@@ -1514,7 +1514,7 @@ public class OrderServiceImpl extends ServiceImpl<MtOrderMapper, MtOrder> implem
                     }
                 }
                 MtUser userInfo = memberService.queryMemberById(orderInfo.getUserId());
-                MtUserGrade userGrade = userGradeService.queryUserGradeById(orderInfo.getMerchantId(), Integer.parseInt(userInfo.getGradeId()), orderInfo.getUserId());
+                MtUserGrade userGrade = userGradeService.queryUserGradeById(orderInfo.getMerchantId(), userInfo.getGradeId(), orderInfo.getUserId());
                 // 是否会员积分加倍
                 if (userGrade != null && userGrade.getSpeedPoint() > 1) {
                     pointNum = pointNum * userGrade.getSpeedPoint();
@@ -1983,7 +1983,7 @@ public class OrderServiceImpl extends ServiceImpl<MtOrderMapper, MtOrder> implem
         Integer storeId = 0;
         if (cartList.size() > 0) {
             // 会员折扣
-            MtUserGrade userGrade = userGradeService.queryUserGradeById(userInfo.getMerchantId(), userInfo.getGradeId() != null ? Integer.parseInt(userInfo.getGradeId()) : 1, userId);
+            MtUserGrade userGrade = userGradeService.queryUserGradeById(userInfo.getMerchantId(), userInfo.getGradeId() != null ? userInfo.getGradeId() : 1, userId);
             if (userGrade != null && userGrade.getDiscount() != null && userGrade.getDiscount() > 0 && !userInfo.getIsStaff().equals(YesOrNoEnum.YES.getKey())) {
                 percent = new BigDecimal(userGrade.getDiscount()).divide(new BigDecimal("10"), BigDecimal.ROUND_CEILING, 4);
                 if (percent.compareTo(new BigDecimal("0")) <= 0) {

+ 8 - 0
fuint-application/src/main/java/com/fuint/common/service/impl/PaymentServiceImpl.java

@@ -46,6 +46,11 @@ public class PaymentServiceImpl implements PaymentService {
      * */
     private AlipayService alipayService;
 
+    /**
+     * 云闪付服务接口
+     * */
+    private UnionPayService unionPayService;
+
     /**
      * 会员服务接口
      * */
@@ -87,6 +92,9 @@ public class PaymentServiceImpl implements PaymentService {
         if (orderInfo.getPayType().equals(PayTypeEnum.ALISCAN.getKey())) {
             // 支付宝支付
             responseObject = alipayService.createPrepayOrder(userInfo, orderInfo, payAmount, authCode, giveAmount, ip, platform);
+        } else if (orderInfo.getPayType().equals(PayTypeEnum.UNIONPAY.getKey())) {
+            // 云闪付支付
+            responseObject = unionPayService.createPrepayOrder(userInfo, orderInfo, payAmount, authCode, giveAmount, ip, platform);
         } else {
             // 微信支付
             responseObject = weixinService.createPrepayOrder(userInfo, orderInfo, payAmount, authCode, giveAmount, ip, platform, isWechat);

+ 260 - 0
fuint-application/src/main/java/com/fuint/common/service/impl/UnionPayServiceImpl.java

@@ -0,0 +1,260 @@
+package com.fuint.common.service.impl;
+
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.domain.AlipayTradePayModel;
+import com.alipay.api.domain.AlipayTradeQueryModel;
+import com.alipay.api.domain.AlipayTradeRefundModel;
+import com.alipay.api.internal.util.AlipaySignature;
+import com.alipay.api.response.AlipayTradePayResponse;
+import com.alipay.api.response.AlipayTradeQueryResponse;
+import com.alipay.api.response.AlipayTradeRefundResponse;
+import com.fuint.common.bean.AliPayBean;
+import com.fuint.common.dto.OrderDto;
+import com.fuint.common.dto.UserOrderDto;
+import com.fuint.common.enums.*;
+import com.fuint.common.service.*;
+import com.fuint.framework.exception.BusinessCheckException;
+import com.fuint.framework.web.ResponseObject;
+import com.fuint.repository.model.*;
+import com.fuint.utils.StringUtil;
+import com.ijpay.alipay.AliPayApi;
+import com.ijpay.alipay.AliPayApiConfig;
+import com.ijpay.alipay.AliPayApiConfigKit;
+import lombok.AllArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * 云闪付相关接口
+ *
+ * Created by FSQ
+ * CopyRight https://www.fuint.cn
+ */
+@Service
+@AllArgsConstructor
+public class UnionPayServiceImpl implements UnionPayService {
+
+    private static final Logger logger = LoggerFactory.getLogger(UnionPayServiceImpl.class);
+
+    private AliPayBean aliPayBean;
+
+    /**
+     * 订单服务接口
+     * */
+    private OrderService orderService;
+
+    /**
+     * 店铺服务接口
+     * */
+    private StoreService storeService;
+
+    /**
+     * 创建预支付订单
+     *
+     * @param userInfo 会员信息
+     * @param orderInfo 订单信息
+     * @param payAmount 支付金额
+     * @param authCode 付款码
+     * @param giveAmount 赠送金额
+     * @param ip 支付IP地址
+     * @param platform 支付平台
+     * @return
+     * */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public ResponseObject createPrepayOrder(MtUser userInfo, MtOrder orderInfo, Integer payAmount, String authCode, Integer giveAmount, String ip, String platform) throws BusinessCheckException {
+        logger.info("UnionPayService createPrepayOrder inParams userInfo={} payAmount={} giveAmount={} goodsInfo={}", userInfo, payAmount, giveAmount, orderInfo);
+
+        String goodsInfo = orderInfo.getOrderSn();
+        if (orderInfo.getType().equals(OrderTypeEnum.PRESTORE.getKey())) {
+            goodsInfo = OrderTypeEnum.PRESTORE.getValue();
+        }
+
+        // 更新支付金额
+        BigDecimal payAmount1 = new BigDecimal(payAmount).divide(new BigDecimal("100"));
+        OrderDto reqDto = new OrderDto();
+        reqDto.setId(orderInfo.getId());
+        reqDto.setPayAmount(payAmount1);
+        reqDto.setPayType(orderInfo.getPayType());
+        reqDto.setOrderSn(orderInfo.getOrderSn());
+        orderService.updateOrder(reqDto);
+
+        getApiConfig(orderInfo.getStoreId());
+        String notifyUrl = aliPayBean.getDomain();
+        AlipayTradePayModel model = new AlipayTradePayModel();
+        model.setAuthCode(authCode);
+        model.setSubject(goodsInfo);
+        model.setTotalAmount(payAmount1.toString());
+        model.setOutTradeNo(orderInfo.getOrderSn());
+        model.setStoreId(orderInfo.getStoreId().toString());
+        model.setScene("bar_code");
+
+        String code = "";
+        try {
+            AlipayTradePayResponse response = AliPayApi.tradePayToResponse(model, notifyUrl);
+            code = response.getCode();
+            String msg = response.getMsg();
+            logger.info("UnionPayService createPrepayOrder return code: {}, msg ", code, msg);
+            if (!code.equals("10000") || !msg.equalsIgnoreCase("Success")) {
+                if (code.equals("10003")) {
+                    // 需要会员输入支付密码,等待10秒后查询订单
+                    try {
+                        Thread.sleep(10000);
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                    }
+                    Map<String, String> payResult = queryPaidOrder(orderInfo.getStoreId(), response.getTradeNo(), orderInfo.getOrderSn());
+                    if (payResult == null) {
+                        throw new BusinessCheckException("支付宝支付失败");
+                    }
+                } else {
+                    throw new BusinessCheckException("支付宝支付出错:" + msg);
+                }
+            }
+        } catch (Exception e) {
+            logger.error("UnionPayService createPrepayOrder exception {}", e.getMessage());
+            throw new BusinessCheckException("支付宝支付出错,请检查配置项");
+        }
+
+        Map<String, String> respData = new HashMap<>();
+        respData.put("result", code);
+
+        ResponseObject responseObject = new ResponseObject(200, "支付宝支付接口返回成功", respData);
+        logger.info("UnionPayService createPrepayOrder outParams {}", responseObject.toString());
+
+        return responseObject;
+    }
+
+    /**
+     * 支付回调
+     *
+     * @param params 请求参数
+     * @return
+     * */
+    @Override
+    public Boolean checkCallBack(Map<String, String> params) throws Exception {
+        String orderSn = params.get("out_trade_no") != null ? params.get("out_trade_no") : "";
+        Integer storeId = 0;
+        UserOrderDto orderDto = orderService.getOrderByOrderSn(orderSn);
+        if (orderDto != null && orderDto.getStoreInfo() != null) {
+            storeId = orderDto.getStoreInfo().getId();
+        }
+        getApiConfig(storeId);
+        return AlipaySignature.rsaCheckV1(params, aliPayBean.getPublicKey(), "UTF-8", "RSA2");
+    }
+
+    /**
+     * 获取支付配置
+     *
+     * @param storeId 店铺ID
+     * @return
+     * */
+    public AliPayApiConfig getApiConfig(Integer storeId) throws BusinessCheckException {
+        AliPayApiConfig aliPayApiConfig;
+        String appId = aliPayBean.getAppId();
+        String privateKey = aliPayBean.getPrivateKey();
+        String publicKey = aliPayBean.getPublicKey();
+
+        // 优先读取店铺的支付账号
+        MtStore mtStore = storeService.queryStoreById(storeId);
+        if (mtStore != null && StringUtil.isNotEmpty(mtStore.getAlipayAppId()) && StringUtil.isNotEmpty(mtStore.getAlipayPrivateKey()) && StringUtil.isNotEmpty(mtStore.getAlipayPublicKey())) {
+            appId = mtStore.getAlipayAppId();
+            privateKey = mtStore.getAlipayPrivateKey();
+            publicKey = mtStore.getAlipayPublicKey();
+        }
+
+        aliPayApiConfig = AliPayApiConfig.builder()
+                .setAppId(appId)
+                .setAliPayPublicKey(publicKey)
+                .setCharset("UTF-8")
+                .setPrivateKey(privateKey)
+                .setServiceUrl(aliPayBean.getServerUrl())
+                .setSignType("RSA2")
+                .build();
+
+        AliPayApiConfigKit.setThreadLocalAppId(appId);
+        AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig);
+
+        return aliPayApiConfig;
+    }
+
+    /**
+     * 查询支付订单
+     *
+     * @param storeId 店铺ID
+     * @param tradeNo 交易单号
+     * @param orderSn 订单号
+     * @return
+     * */
+    @Override
+    public Map<String, String> queryPaidOrder(Integer storeId, String tradeNo, String orderSn) throws BusinessCheckException {
+        try {
+            AlipayTradeQueryModel model = new AlipayTradeQueryModel();
+            if (StringUtil.isNotEmpty(orderSn)) {
+                model.setOutTradeNo(orderSn);
+            }
+            if (StringUtil.isNotEmpty(tradeNo)) {
+                model.setTradeNo(tradeNo);
+            }
+            getApiConfig(storeId);
+            AlipayTradeQueryResponse response = AliPayApi.tradeQueryToResponse(model);
+            if (response != null) {
+                // TradeStatus:TRADE_SUCCESS(交易支付成功,可进行退款)或 TRADE_FINISHED(交易结束,不可退款)
+                if (response.getTradeStatus() != null && response.getTradeStatus().equals("TRADE_SUCCESS")) {
+                    Map<String, String> result = new HashMap<>();
+                    result.put("tradeNo", response.getTradeNo());
+                    result.put("status", response.getTradeStatus());
+                    result.put("payAmount", response.getBuyerPayAmount());
+                    return result;
+                }
+            }
+        } catch (AlipayApiException e) {
+            logger.info("AlipayService queryPaidOrder response", e.getMessage());
+        }
+
+        return null;
+    }
+
+    /**
+     * 发起售后退款
+     *
+     * @param storeId 店铺ID
+     * @param orderSn 订单号
+     * @param totalAmount 订单总金额
+     * @param refundAmount 售后金额
+     * @param platform 订单平台
+     * @return
+     * */
+    public Boolean doRefund(Integer storeId, String orderSn, BigDecimal totalAmount, BigDecimal refundAmount, String platform) throws BusinessCheckException {
+        try {
+            logger.info("AlipayService.doRefund orderSn = {}, totalFee = {}, refundFee = {}", orderSn, totalAmount, refundAmount);
+            if (StringUtil.isEmpty(orderSn)) {
+                throw new BusinessCheckException("退款订单号不能为空...");
+            }
+            if (refundAmount.compareTo(totalAmount) > 0) {
+                throw new BusinessCheckException("退款金额不能大于总金额...");
+            }
+            getApiConfig(storeId);
+            AlipayTradeRefundModel model = new AlipayTradeRefundModel();
+            model.setOutTradeNo(orderSn);
+            model.setRefundAmount(refundAmount.toString());
+            model.setRefundReason("申请退款");
+            AlipayTradeRefundResponse refundResponse = AliPayApi.tradeRefundToResponse(model);
+            String code = refundResponse.getCode();
+            String msg = refundResponse.getMsg();
+            String subMsg = refundResponse.getSubMsg() == null ? msg : refundResponse.getSubMsg();
+            logger.info("AlipayService refundResult response Body = {}", refundResponse.getBody());
+            if (!code.equals("10000") || !msg.equalsIgnoreCase("Success")) {
+                throw new BusinessCheckException("支付宝退款失败," + subMsg);
+            }
+        } catch (AlipayApiException e) {
+            logger.error("AlipayService.doRefund error = {}", e.getMessage());
+            e.printStackTrace();
+        }
+        return true;
+    }
+}

+ 2 - 2
fuint-application/src/main/java/com/fuint/common/service/impl/UserGradeServiceImpl.java

@@ -223,9 +223,9 @@ public class UserGradeServiceImpl extends ServiceImpl<MtUserGradeMapper, MtUserG
         List<MtUserGrade> userGrades = mtUserGradeMapper.selectList(lambdaQueryWrapper);
         List<MtUserGrade> dataList = new ArrayList<>();
 
-        String userGradeId = "0";
+        Integer userGradeId = 0;
         if (userInfo != null) {
-            if (StringUtil.isNotEmpty(userInfo.getGradeId())) {
+            if (userInfo.getGradeId() != null && userInfo.getGradeId() > 0) {
                 userGradeId = userInfo.getGradeId();
             }
         }

+ 1 - 1
fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientPayController.java

@@ -128,7 +128,7 @@ public class ClientPayController extends BaseController {
         BigDecimal payDiscount = new BigDecimal("1");
         Integer merchantId = merchantService.getMerchantId(merchantNo);
         if (mtUser != null && !mtUser.getIsStaff().equals(YesOrNoEnum.YES.getKey())) {
-            MtUserGrade userGrade = userGradeService.queryUserGradeById(merchantId, Integer.parseInt(mtUser.getGradeId()), mtUser.getId());
+            MtUserGrade userGrade = userGradeService.queryUserGradeById(merchantId, mtUser.getGradeId(), mtUser.getId());
             if (userGrade != null) {
                 if (userGrade.getDiscount() > 0) {
                     payDiscount = new BigDecimal(userGrade.getDiscount()).divide(new BigDecimal("10"), BigDecimal.ROUND_CEILING, 4);

+ 1 - 1
fuint-application/src/main/java/com/fuint/module/clientApi/controller/ClientUserController.java

@@ -111,7 +111,7 @@ public class ClientUserController extends BaseController {
         }
         MtUserGrade gradeInfo = null;
         if (mtUser != null) {
-            gradeInfo = memberService.queryMemberGradeByGradeId(Integer.parseInt(mtUser.getGradeId()));
+            gradeInfo = memberService.queryMemberGradeByGradeId(mtUser.getGradeId());
         }
 
         List<MtUserGrade> memberGrade = userGradeService.getPayUserGradeList(merchantId, mtUser);

+ 1 - 1
fuint-application/src/main/java/com/fuint/module/merchantApi/controller/MerchantMemberController.java

@@ -129,7 +129,7 @@ public class MerchantMemberController extends BaseController {
             return getFailureResult(201, "该账号不是商户");
         }
         MtUser memberInfo = memberService.queryMemberById(memberParam.getMemberId());
-        MtUserGrade gradeInfo = memberService.queryMemberGradeByGradeId(Integer.parseInt(memberInfo.getGradeId()));
+        MtUserGrade gradeInfo = memberService.queryMemberGradeByGradeId(memberInfo.getGradeId());
 
         Map<String, Object> result = new HashMap<>();
         result.put("userInfo", memberInfo);

+ 1 - 1
fuint-repository/src/main/java/com/fuint/repository/model/MtUser.java

@@ -52,7 +52,7 @@ public class MtUser implements Serializable {
     private String idcard;
 
     @ApiModelProperty("等级ID")
-    private String gradeId;
+    private Integer gradeId;
 
     @ApiModelProperty("会员开始时间")
     @TableField(strategy = FieldStrategy.IGNORED)