igl 2 kuukautta sitten
vanhempi
commit
b6982e3f34
14 muutettua tiedostoa jossa 87 lisäystä ja 38 poistoa
  1. 18 0
      vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/constant/PlatformConstant.java
  2. 1 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/controller/AssetController.java
  3. 8 2
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/handle/TradeHandle.java
  4. 2 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/PlatformProfitRatioService.java
  5. 17 13
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/AssetServiceImpl.java
  6. 3 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantApplyRecordServiceImpl.java
  7. 2 2
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantRelationServiceImpl.java
  8. 4 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java
  9. 0 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderReturnApplyServiceImpl.java
  10. 5 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderServiceImpl.java
  11. 18 15
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OnlinePayServiceImpl.java
  12. 2 2
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/PlatformProfitRatioServiceImpl.java
  13. 1 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/UserProfitRatioServiceImpl.java
  14. 6 1
      vehicle-server/src/main/resources/mapper/OmsOrderMapper.xml

+ 18 - 0
vehicle-client/src/main/java/com/chelvc/cloud/vehicle/client/constant/PlatformConstant.java

@@ -2,5 +2,23 @@ package com.chelvc.cloud.vehicle.client.constant;
 
 public interface PlatformConstant {
 
+    /**
+     * 平台id
+     */
     static Long PLATFORM_ID = 0L;
+
+    /**
+     * 默认商户抽佣比例
+     */
+    static Integer DEFAULT_MERCHANT_RATIO = 10;
+
+    /**
+     * 默认用户抽佣比例
+     */
+    static Integer DEFAULT_USER_RATIO = 10;
+
+    /**
+     * 异常提示
+     */
+    static String EXCEPTION_TIPS = "系统繁忙,请稍后重试";
 }

+ 1 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/controller/AssetController.java

@@ -3,6 +3,7 @@ package com.chelvc.cloud.vehicle.server.controller;
 import com.chelvc.cloud.vehicle.client.dto.MerchantAssetDTO;
 import com.chelvc.cloud.vehicle.client.param.*;
 import com.chelvc.cloud.vehicle.server.service.AssetService;
+import com.chelvc.framework.common.exception.ResourceUnavailableException;
 import com.chelvc.framework.common.function.Executor;
 import com.chelvc.framework.database.context.DatabaseContextHolder;
 import lombok.RequiredArgsConstructor;

+ 8 - 2
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/handle/TradeHandle.java

@@ -1,6 +1,7 @@
 package com.chelvc.cloud.vehicle.server.handle;
 
 import com.alibaba.fastjson.JSONObject;
+import com.chelvc.cloud.vehicle.client.constant.TradeConstant;
 import com.chelvc.cloud.vehicle.client.param.SxyNotifyParam;
 import com.chelvc.cloud.vehicle.client.util.JsonBuilder;
 import com.chelvc.cloud.vehicle.client.util.MyExecuter;
@@ -28,8 +29,13 @@ public class TradeHandle {
 
     public static JSONObject decrypt(SxyNotifyParam param){
         JSONObject responseData = new JSONObject();
-        responseData.put("merchantId", param.getMerchantId());
-        responseData.put("partnerId", null);
+        String merchantId = param.getMerchantId();
+        responseData.put("merchantId", merchantId);
+        if(TradeConstant.PARTNER_ID.equals(merchantId)){
+            responseData.put("partnerId", null);
+        } else {
+            responseData.put("partnerId", TradeConstant.PARTNER_ID);
+        }
         responseData.put("encryptKey", param.getEncryptKey());
         responseData.put("data", param.getData());
         //解密

+ 2 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/PlatformProfitRatioService.java

@@ -16,6 +16,8 @@ public interface PlatformProfitRatioService {
      */
     int queryRatio(Long merchantId);
 
+    int init(Long merchantId);
+
     void edit(EditPlatformProfitRatioParam param);
 
     Pagination<PlatformProfitRatioDTO> queryPageList(QueryPlatformProfitRatioParam param);

+ 17 - 13
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/AssetServiceImpl.java

@@ -1,7 +1,6 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
-import com.alibaba.nacos.shaded.com.google.gson.Gson;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -9,8 +8,6 @@ import com.chelvc.cloud.vehicle.client.constant.PlatformConstant;
 import com.chelvc.cloud.vehicle.client.constant.TradeConstant;
 import com.chelvc.cloud.vehicle.client.dto.*;
 import com.chelvc.cloud.vehicle.client.param.SxyNotifyParam;
-import com.chelvc.cloud.vehicle.client.param.TransferNotifyParam;
-import com.chelvc.cloud.vehicle.client.param.WithdrawNotifyParam;
 import com.chelvc.cloud.vehicle.client.param.WithdrawParam;
 import com.chelvc.cloud.vehicle.server.dao.AssetMapper;
 import com.chelvc.cloud.vehicle.server.entity.Asset;
@@ -32,17 +29,15 @@ import com.upay.sdk.transferaccount.executer.TransferAccountOrderExecuter;
 import com.upay.sdk.wallet.builder.WithdrawBuilder;
 import com.upay.sdk.wallet.executer.WithdrawExecuter;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.io.IOException;
-import java.io.PrintWriter;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDateTime;
-import java.util.HashMap;
 
+@Slf4j
 @Service
 @RequiredArgsConstructor(onConstructor = @__({@Autowired,@Lazy}))
 public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements AssetService {
@@ -182,6 +177,9 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements
      */
     @Override
     public void withdraw(Long userId, Integer type, BigDecimal amount) {
+        if(amount.compareTo(new BigDecimal("1.00")) <= 0){
+            throw new ResourceUnavailableException("提现金额不能少于1元");
+        }
         Long withdrawId = transferWithdrawService.createTransferWithdraw(userId, type, amount, 1, 0);
         //查询首信易商户号
         MerchantRelation relation = merchantRelationService.queryByUserIdAndType(userId, type);
@@ -228,12 +226,13 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements
             log.error("transfer order error:", e);
         }
         transferWithdrawService.updateStatusById(withdrawId, 2, cause);
+        throw new ResourceUnavailableException(cause);
     }
 
     public int frozenAmount(BigDecimal amount, Long userId, Integer type) {
         Asset asset = queryAsset(userId, type);
         BigDecimal total = asset.getTotal();
-        if(amount.compareTo(total) >= 0){
+        if(amount.compareTo(total) > 0){
             throw new ResourceUnavailableException("余额不足");
         }
         asset.setTotal(asset.getTotal().subtract(amount));
@@ -301,6 +300,7 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements
             log.error("transfer order error:", e);
         }
         transferWithdrawService.updateStatusById(transferId, 2, cause);
+        throw new ResourceUnavailableException(cause);
     }
 
     @Override
@@ -324,6 +324,7 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements
         if(responseData == null){
             return;
         }
+        log.info("提现回调参数:{}", responseData);
         String requestId = responseData.getString("requestId");
         Long id = Long.parseLong(requestId);
         OmsTransferWithdraw withdraw = transferWithdrawService.queryById(id);
@@ -342,10 +343,12 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements
         }
         String withdrawStatus = responseData.getString("withdrawStatus");
         BigDecimal procedureAmount = BigDecimal.ZERO;
+        String receivedAmount = responseData.getString("receivedAmount");
+        BigDecimal realAmount = new BigDecimal(receivedAmount == null ? "0" : receivedAmount)
+                .divide(new BigDecimal("100"), 2, RoundingMode.UP);
         if("SUCCESS".equals(withdrawStatus)){
             transferStatus = 1;
-            String receivedAmount = responseData.getString("receivedAmount");
-            procedureAmount = amount.subtract(new BigDecimal(receivedAmount));
+            procedureAmount = amount.subtract(realAmount);
         } else if("FAIL".equals(withdrawStatus)){
             transferStatus = 2;
         } else {
@@ -362,8 +365,8 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements
                 baseMapper.deductFrozen(amount, withdraw.getUserId(), withdraw.getType(), LocalDateTime.now());
                 BigDecimal total = queryTotal(withdraw.getUserId(), withdraw.getType());
                 //记录平台抽成余额明细
-                balanceDetailService.recordFlow(id, withdraw.getType(), withdraw.getUserId(), amount, BigDecimal.ZERO,
-                        amount, total, 1, 4, withdraw.getUserId());
+                balanceDetailService.recordFlow(id, withdraw.getType(), withdraw.getUserId(), amount, procedureAmount,
+                        realAmount, total, 1, 4, withdraw.getUserId());
             }
         }
     }
@@ -376,6 +379,7 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements
     @Override
     public void transferNotify(SxyNotifyParam param) {
         JSONObject responseData = TradeHandle.decrypt(param);
+        log.info("转账回调参数:{}", responseData);
         if(responseData == null){
             return;
         }

+ 3 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantApplyRecordServiceImpl.java

@@ -12,12 +12,14 @@ import com.chelvc.cloud.vehicle.server.handle.TradeHandle;
 import com.chelvc.cloud.vehicle.server.service.*;
 import com.upay.sdk.Constants;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.util.Date;
 
+@Slf4j
 @Service
 @RequiredArgsConstructor(onConstructor = @__(@Autowired))
 public class MerchantApplyRecordServiceImpl extends
@@ -36,6 +38,7 @@ public class MerchantApplyRecordServiceImpl extends
     @Override
     public void updateSxyMerchantIdByNotify(SxyNotifyParam param) {
         JSONObject responseData = TradeHandle.decrypt(param);
+        log.info("申请商户号回调参数:{}", responseData);
         String status = responseData.getString("subMerchantReviewStatus");
         if (Constants.ERROR.equals(status)) {
             //解密后报文,如果status=ERROR时,不需要验签

+ 2 - 2
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantRelationServiceImpl.java

@@ -130,7 +130,7 @@ public class MerchantRelationServiceImpl extends ServiceImpl<MerchantRelationMap
         } else {
             recordStatus = 1;
             String errorMessage = json.getString("errorMessage");
-            throw new ResourceUnavailableException("【首信易】:"+errorMessage);
+            throw new ResourceUnavailableException("【认证失败】:"+errorMessage);
         }
         String subMerchantId = json.getString("subMerchantId");
         MerchantApplyRecord record = new MerchantApplyRecord();
@@ -219,7 +219,7 @@ public class MerchantRelationServiceImpl extends ServiceImpl<MerchantRelationMap
         } else {
             recordStatus = 1;
             String errorMessage = json.getString("errorMessage");
-            throw new ResourceUnavailableException("【首信易】:"+errorMessage);
+            throw new ResourceUnavailableException("【认证失败】:"+errorMessage);
         }
         String subMerchantId = json.getString("subMerchantId");
         MerchantApplyRecord record = new MerchantApplyRecord();

+ 4 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java

@@ -64,6 +64,8 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
 
     private final MerchantApplyRecordService merchantApplyRecordService;
 
+    private final PlatformProfitRatioService platformProfitRatioService;
+
     @Override
     public List<MerchantDTO> listNearbyMerchants(@NonNull LocationQueryParam param, int size) {
         List<MerchantDTO> list = this.baseMapper.listNearbyMerchants(param, size);
@@ -223,7 +225,8 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
                 // this.categoryService.saveBatchCategories(categories);
             }
         }
-
+        //初始化商家平台抽成比例
+        platformProfitRatioService.init(merchant.getId());
         return merchant.getId();
     }
 

+ 0 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderReturnApplyServiceImpl.java

@@ -233,6 +233,5 @@ public class OmsOrderReturnApplyServiceImpl extends ServiceImpl<OmsOrderReturnAp
         }
         omsOrderReturnApply.setStatus(status);
         this.baseMapper.updateById(omsOrderReturnApply);
-
     }
 }

+ 5 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderServiceImpl.java

@@ -1018,6 +1018,7 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
     @Override
     public void orderNotify(SxyNotifyParam param) {
         JSONObject responseData = TradeHandle.decrypt(param);
+        log.info("支付回调参数:{}", responseData);
         if(responseData == null){
             return;
         }
@@ -1043,6 +1044,9 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
         if("SUCCESS".equals(status)){
             orderStatus = 1;
             String fee = responseData.getString("feeAmount");
+            if(StringUtils.isBlank(fee)){
+                fee = "0";
+            }
             feeAmount = new BigDecimal(fee).divide(new BigDecimal("100"), 2, RoundingMode.UP);
             BigDecimal realityAmount = payAmount.subtract(feeAmount);
             //平台资产变更-添加冻结金额
@@ -1081,6 +1085,7 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
     @Override
     public void orderRefundNotify(SxyNotifyParam param) {
         JSONObject responseData = TradeHandle.decrypt(param);
+        log.info("退款回调参数:{}", responseData);
         if(responseData == null){
             return;
         }

+ 18 - 15
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OnlinePayServiceImpl.java

@@ -14,6 +14,7 @@ import com.chelvc.cloud.vehicle.server.service.OmsOrderRefundService;
 import com.chelvc.cloud.vehicle.server.service.OnlinePayService;
 import com.chelvc.framework.base.context.SessionContextHolder;
 import com.chelvc.framework.common.exception.ResourceUnavailableException;
+import com.chelvc.framework.common.util.StringUtils;
 import com.chelvc.framework.wechat.PayChannel;
 import com.chelvc.framework.wechat.PayMode;
 import com.chelvc.framework.wechat.WechatUnifiedOrder;
@@ -115,7 +116,7 @@ public class OnlinePayServiceImpl  implements OnlinePayService {
 //        builder.setInstalmentParams(instalmentParams);
 //        builder.setSubsidyMark(subsidyMark);
 //        builder.setSubsidyAmount(subsidyAmount);
-
+        String cause = "";
         try {
             OnlinePayOrderExecuter executer = new OnlinePayOrderExecuter();
             System.setProperty("https.protocols", "TLSv1.2,TLSv1.1,SSLv3");
@@ -136,8 +137,7 @@ public class OnlinePayServiceImpl  implements OnlinePayService {
 //                            session.setAttribute("orderResponse", orderResponse);
 //                            resp.sendRedirect("scancode.jsp");
                         } catch (Exception e) {
-                            System.out.println("响应异常</br>");
-                            System.out.println(e.toString());
+                            log.error("响应异常:"+e.getMessage());
                         }
                     } else if (jsonObject.get("jsString") != null) {
                         //微信小程序支付
@@ -155,12 +155,9 @@ public class OnlinePayServiceImpl  implements OnlinePayService {
                             wechatUnifiedOrder.setOrder(jsonObject.getString("requestId"));
                             wechatUnifiedOrder.setMode(PayMode.JSAPI);
                         } catch (Exception e) {
-                            System.out.println("响应异常</br>");
-                            System.out.println(e.toString());
+                            log.error("响应异常:"+e.getMessage());
                         }
                     }
-                    System.out.println("提交成功</br>");
-                    System.out.println(jsonObject);
                 }
                 @Override
                 public void redirect(JSONObject jsonObject, String redirectUrl) throws IOException {
@@ -168,17 +165,22 @@ public class OnlinePayServiceImpl  implements OnlinePayService {
                 }
             });
         } catch (ResponseException e) {
-            System.out.println("响应异常</br>");
-            System.out.println(e.toString());
+            JSONObject responseData = e.getResponseData();
+            cause = responseData.getString("cause");
+            log.error("transfer order error:", e);
         } catch (HmacVerifyException e) {
-            System.out.println("签名验证异常</br>");
-            System.out.println(e.toString());
+            cause = "签名验证异常";
+            log.error("transfer order error:", e);
         } catch (RequestException e) {
-            System.out.println("请求异常</br>");
-            System.out.println(e.toString());
+            JSONObject responseData = e.getResponseData();
+            cause = responseData.getString("cause");
+            log.error("transfer order error:", e);
         } catch (UnknownException e) {
-            System.out.println("未知异常</br>");
-            System.out.println(e.toString());
+            cause = "未知异常";
+            log.error("transfer order error:", e);
+        }
+        if(!StringUtils.isBlank(cause)){
+            throw new ResourceUnavailableException(cause);
         }
         return wechatUnifiedOrder;
     }
@@ -270,6 +272,7 @@ public class OnlinePayServiceImpl  implements OnlinePayService {
             log.error("transfer order error:", e);
         }
         omsOrderRefundService.updateStatus(refundId, 3, cause);
+        throw new ResourceUnavailableException(cause);
     }
     @Override
     public String refundQuery(OmsOrder omsOrder){

+ 2 - 2
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/PlatformProfitRatioServiceImpl.java

@@ -111,12 +111,12 @@ public class PlatformProfitRatioServiceImpl extends ServiceImpl<PlatformProfitRa
                 .records(result.getRecords()).build();
     }
 
+    @Override
     public int init(Long merchantId) {
         ProfitRatioConfig config = profitRatioConfigService.queryByTypeAndLeast(1);
         PlatformProfitRatio ratio = new PlatformProfitRatio();
         ratio.setMerchantId(merchantId);
-        ratio.setRatio(config == null ? 10 : config.getRatio());
-        ratio.setUpdater(PlatformConstant.PLATFORM_ID);
+        ratio.setRatio(config == null ? PlatformConstant.DEFAULT_MERCHANT_RATIO : config.getRatio());
         ratio.setUpdater(PlatformConstant.PLATFORM_ID);
         ratio.setUpdateTime(LocalDateTime.now());
         ratio.setCreateTime(LocalDateTime.now());

+ 1 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/UserProfitRatioServiceImpl.java

@@ -58,7 +58,7 @@ public class UserProfitRatioServiceImpl extends ServiceImpl<UserProfitRatioMappe
         config.eq(ProfitRatioConfig::getStatus, 0);
         config.orderByAsc(ProfitRatioConfig::getRatio);
         List<ProfitRatioConfig> list = profitRatioConfigMapper.selectList(config);
-        int ratio = 0;
+        int ratio = PlatformConstant.DEFAULT_USER_RATIO;
         if(CollectionUtils.isNotEmpty(list)){
             ratio = list.get(0).getRatio();
         }

+ 6 - 1
vehicle-server/src/main/resources/mapper/OmsOrderMapper.xml

@@ -923,7 +923,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <update id="updateStatus">
         update oms_order
-        set status = #{status}, fee_amount = #{feeAmount}, out_order_id = #{outOrderId}, update_time = #{updateTime}
+        set
+            status = #{status},
+            fee_amount = #{feeAmount},
+            out_order_id = #{outOrderId},
+            payment_time = #{updateTime},
+            update_time = #{updateTime}
         where id = #{id}
     </update>