فهرست منبع

Merge branch 'master' of http://8.210.64.198:30000/a258771316/ym-ipos

chengxiaowen 1 سال پیش
والد
کامیت
ff1c99d235
22فایلهای تغییر یافته به همراه389 افزوده شده و 316 حذف شده
  1. 1 1
      src/main/java/com/poteviohealth/ym/ipos/controller/MerchantController.java
  2. 2 0
      src/main/java/com/poteviohealth/ym/ipos/controller/ReceivePayAndRefundController.java
  3. 23 26
      src/main/java/com/poteviohealth/ym/ipos/controller/app/SettlementAppController.java
  4. 121 254
      src/main/java/com/poteviohealth/ym/ipos/controller/feign/IposFeignController.java
  5. 19 1
      src/main/java/com/poteviohealth/ym/ipos/model/detail/SplitInfo.java
  6. 8 1
      src/main/java/com/poteviohealth/ym/ipos/model/detail/SplitList.java
  7. 4 0
      src/main/java/com/poteviohealth/ym/ipos/model/merchant/dto/SearchDto.java
  8. 31 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/PayNotification.java
  9. 15 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/PaymentRecords.java
  10. 17 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/back/PayQueryBack.java
  11. 8 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/back/PayReverseBack.java
  12. 9 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/PayDetail.java
  13. 1 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/PayQueryDetail.java
  14. 4 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/PayReverseDetail.java
  15. 1 1
      src/main/java/com/poteviohealth/ym/ipos/model/split/SplitRecords.java
  16. 19 0
      src/main/java/com/poteviohealth/ym/ipos/model/split/back/PayConfirmQueryBack.java
  17. 3 0
      src/main/java/com/poteviohealth/ym/ipos/model/split/detail/AccountBalanceList.java
  18. 20 0
      src/main/java/com/poteviohealth/ym/ipos/model/split/detail/SplitListConfirm.java
  19. 9 1
      src/main/java/com/poteviohealth/ym/ipos/service/IMerchantService.java
  20. 31 8
      src/main/java/com/poteviohealth/ym/ipos/service/impl/MerchantServiceImpl.java
  21. 40 22
      src/main/java/com/poteviohealth/ym/ipos/service/impl/PaymentServiceImpl.java
  22. 3 1
      src/main/java/com/poteviohealth/ym/ipos/service/impl/SplitServiceImpl.java

+ 1 - 1
src/main/java/com/poteviohealth/ym/ipos/controller/MerchantController.java

@@ -57,7 +57,7 @@ public class MerchantController  extends BaseWebController {
         bd.setAppId("wx0d821c4bde0e44b7");
         bd.setPosId("CHECG");
         bd.setStoreId("19");
-        bd.setName("(CHECG)中康养");
+        bd.setName("(CHECG)中康养科技");
         return paymentService.bindPos(bd);
     }
 

+ 2 - 0
src/main/java/com/poteviohealth/ym/ipos/controller/ReceivePayAndRefundController.java

@@ -1,5 +1,6 @@
 package com.poteviohealth.ym.ipos.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.poteviohealth.cgp.common.facade.log.OperateType;
 import com.poteviohealth.cgp.common.facade.log.OperationLog;
 import com.poteviohealth.cgp.common.integrated.LongParams;
@@ -37,6 +38,7 @@ public class ReceivePayAndRefundController {
     @ResponseBody
     @OperationLog(type = OperateType.ADD, description = "支付回调")
     public String payNotify(@RequestBody PayNotification payNotification){
+        log.info("payNotification==="+ JSONObject.toJSONString(payNotification));
         return paymentService.payNotification(payNotification);
     }
 

+ 23 - 26
src/main/java/com/poteviohealth/ym/ipos/controller/app/SettlementAppController.java

@@ -1,6 +1,5 @@
 package com.poteviohealth.ym.ipos.controller.app;
 
-import com.google.common.collect.Lists;
 import com.poteviohealth.cgp.common.controller.BaseWebController;
 import com.poteviohealth.cgp.common.facade.log.OperateType;
 import com.poteviohealth.cgp.common.facade.log.OperationLog;
@@ -11,12 +10,10 @@ import com.poteviohealth.cgp.common.integrated.customer.model.GroupLeaderDTO;
 import com.poteviohealth.cgp.common.integrated.customer.model.GroupLeaderParams;
 import com.poteviohealth.cgp.common.model.CommonPage;
 import com.poteviohealth.cgp.common.model.VaultsResponse;
-import com.poteviohealth.cgp.common.utils.CgpTool;
 import com.poteviohealth.ym.ipos.model.split.SplitWithdraw;
 import com.poteviohealth.ym.ipos.model.split.back.AccountBalanceBack;
 import com.poteviohealth.ym.ipos.model.split.back.SettlementQueryBack;
 import com.poteviohealth.ym.ipos.model.split.back.WithdrawBack;
-import com.poteviohealth.ym.ipos.model.split.detail.AccountBalanceList;
 import com.poteviohealth.ym.ipos.model.split.detail.SettlementQueryDetail;
 import com.poteviohealth.ym.ipos.model.split.dto.SplitWithdrawDto;
 import com.poteviohealth.ym.ipos.model.split.dto.WithdrawDto;
@@ -31,8 +28,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
-import java.util.Date;
-import java.util.List;
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
 
 /**
  * 结算管理app
@@ -66,8 +63,8 @@ public class SettlementAppController extends BaseWebController {
     @OperationLog(type = OperateType.SELECT, description ="单账户查询")
     public VaultsResponse<AccountBalanceBack> accountBalanceQuery(@RequestBody StringParams params) {
 
-        //TODO 暂时去掉三方支付
-      /*  if(StringUtils.isEmpty(params.getId())){
+        //TODO 三方支付相关
+        if(StringUtils.isEmpty(params.getId())){
             String ipos = TokenContext.cureMiniUser().getIposMerchantId();
             if(StringUtils.isEmpty(ipos)){
                 return VaultsResponse.failed("账户未激活,请联系管理员");
@@ -75,16 +72,16 @@ public class SettlementAppController extends BaseWebController {
             params.setId(TokenContext.cureMiniUser().getIposMerchantId());
         }
 
-        return splitService.accountBalanceQuery(params.getId());*/
+        return splitService.accountBalanceQuery(params.getId());
 
-        Integer money = splitWithdrawService.getGroupLeaderWithdrawSumPrice(TokenContext.cureOperatorId(), TokenContext.cureMiniUser().getGroupLeaderId());
+       /* Integer money = splitWithdrawService.getGroupLeaderWithdrawSumPrice(TokenContext.cureOperatorId(), TokenContext.cureMiniUser().getGroupLeaderId());
         AccountBalanceBack balanceBack = new AccountBalanceBack();
         List<AccountBalanceList> list = Lists.newArrayList();
         AccountBalanceList abList = new AccountBalanceList();
         abList.setAvl_amt(money);
         list.add(abList);
         balanceBack.setList(list);
-        return VaultsResponse.success(balanceBack);
+        return VaultsResponse.success(balanceBack);*/
     }
 
 
@@ -93,10 +90,10 @@ public class SettlementAppController extends BaseWebController {
     @OperationLog(type = OperateType.SELECT, description ="可提现金额查询")
     public VaultsResponse<Long> accountBalanceUse() {
 
-        //TODO 暂时去掉三方支付
-        Long money = splitWithdrawService.getGroupLeaderWithdrawPrice(TokenContext.cureOperatorId(), TokenContext.cureMiniUser().getGroupLeaderId());
-        return VaultsResponse.success(money<0L?0L:money);
-        /*if(StringUtils.isEmpty(TokenContext.cureMiniUser().getIposMerchantId())){
+        //TODO 三方支付相关
+        /*Long money = splitWithdrawService.getGroupLeaderWithdrawPrice(TokenContext.cureOperatorId(), TokenContext.cureMiniUser().getGroupLeaderId());
+        return VaultsResponse.success(money<0L?0L:money);*/
+        if(StringUtils.isEmpty(TokenContext.cureMiniUser().getIposMerchantId())){
             return VaultsResponse.success(0L);
         }
         GroupLeaderParams groupLeaderParams = new GroupLeaderParams();
@@ -115,15 +112,15 @@ public class SettlementAppController extends BaseWebController {
            }catch (Exception e){
                e.printStackTrace();
                return VaultsResponse.success(0L);
-           }*/
+           }
     }
 
     @PostMapping("/withdraw")
     @ApiOperation(value = "取现")
     @OperationLog(type = OperateType.SELECT, description ="取现")
     public VaultsResponse<WithdrawBack> withdraw(@RequestBody WithdrawDto dto) {
-        //TODO 暂时去掉三方支付
-       /* if(StringUtils.isEmpty(dto.getMerchantId())){
+        //TODO 三方支付相关
+        if(StringUtils.isEmpty(dto.getMerchantId())){
             String ipos = TokenContext.cureMiniUser().getIposMerchantId();
             if(StringUtils.isEmpty(ipos)){
                 return VaultsResponse.failed("账户未激活,请联系管理员");
@@ -136,13 +133,13 @@ public class SettlementAppController extends BaseWebController {
         VaultsResponse<GroupLeaderDTO>  vaultsResponse = customerFeignClient.getGroupLeaderById(groupLeaderParams);
         GroupLeaderDTO groupLeaderDTO = vaultsResponse.getData();
 
-       *//* if(groupLeaderDTO.getRemainedAmt()>=dto.getAmount()){
+        if(groupLeaderDTO.getRemainedAmt()>=dto.getAmount()){
             DecimalFormat df = new DecimalFormat("#0.00");
             return VaultsResponse.failed("留存保证金为:"+new BigDecimal(df.format(groupLeaderDTO.getRemainedAmt() / 100.0))+"元,可提现金额不足");
-        }*//*
+        }
         dto.setAmount(dto.getAmount());
-        return splitService.withdraw(dto);*/
-        Long money = splitWithdrawService.getGroupLeaderWithdrawPrice(TokenContext.cureOperatorId(), TokenContext.cureMiniUser().getGroupLeaderId());
+        return splitService.withdraw(dto);
+        /*Long money = splitWithdrawService.getGroupLeaderWithdrawPrice(TokenContext.cureOperatorId(), TokenContext.cureMiniUser().getGroupLeaderId());
         money = money<0L?0L:money;
         if(!dto.getAmount().equals(money)){
             return VaultsResponse.failed("可提现金额变动,请刷新");
@@ -166,7 +163,7 @@ public class SettlementAppController extends BaseWebController {
         splitWithdraw.setOpenid(TokenContext.cureMiniUser().getOpenId());
         splitWithdrawService.save(splitWithdraw);
         splitWithdrawService.updateOrderGroupLeaderWithdraw(TokenContext.cureOperatorId(), TokenContext.cureMiniUser().getGroupLeaderId(),splitWithdraw.getId());
-        return VaultsResponse.success();
+        return VaultsResponse.success();*/
     }
 
 
@@ -184,16 +181,16 @@ public class SettlementAppController extends BaseWebController {
     @PostMapping("/list")
     @ApiOperation(value = "取现记录",notes = "list")
     public VaultsResponse<CommonPage<SplitWithdraw>> list(@RequestBody SplitWithdrawDto dto){
-        //TODO 暂时去掉三方支付
-        /*if(StringUtils.isEmpty(dto.getIposMerchantId())){
+        //TODO 三方支付相关
+        if(StringUtils.isEmpty(dto.getIposMerchantId())){
             String ipos = TokenContext.cureMiniUser().getIposMerchantId();
             if(StringUtils.isEmpty(ipos)){
                 return VaultsResponse.failed("账户未激活,请联系管理员");
             }
             dto.setIposMerchantId(TokenContext.cureMiniUser().getIposMerchantId());
-        }*/
+        }
 
-        dto.setIposMerchantId("TZ"+TokenContext.cureMiniUser().getGroupLeaderId());
+        //dto.setIposMerchantId("TZ"+TokenContext.cureMiniUser().getGroupLeaderId());
         return VaultsResponse.success(splitWithdrawService.pageList(dto));
     }
 }

+ 121 - 254
src/main/java/com/poteviohealth/ym/ipos/controller/feign/IposFeignController.java

@@ -1,7 +1,6 @@
 package com.poteviohealth.ym.ipos.controller.feign;
 
 
-import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.google.common.collect.Lists;
 import com.poteviohealth.cgp.common.controller.BaseFeignController;
@@ -11,7 +10,6 @@ import com.poteviohealth.cgp.common.integrated.order.model.PayInfoAppOutDTO;
 import com.poteviohealth.cgp.common.integrated.order.model.RefundReceive;
 import com.poteviohealth.cgp.common.model.VaultsResponse;
 import com.poteviohealth.cgp.common.utils.CgpTool;
-import com.poteviohealth.cgp.common.utils.DateUtils;
 import com.poteviohealth.ym.ipos.model.payment.PaymentRecords;
 import com.poteviohealth.ym.ipos.model.split.SplitRecords;
 import com.poteviohealth.ym.ipos.model.split.SplitRecordsDetail;
@@ -20,7 +18,6 @@ import com.poteviohealth.ym.ipos.utils.YmUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.log4j.Log4j2;
-import org.apache.commons.lang3.time.DateFormatUtils;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -28,9 +25,6 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.annotation.Resource;
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.Date;
 import java.util.List;
 
 /**
@@ -65,7 +59,7 @@ public class IposFeignController extends BaseFeignController {
         pr.setOpenid(payBefor.getOpenid());
         pr.setAppId(payBefor.getAppId());
         pr.setOperatorId(payBefor.getOperatorId());
-        pr.setPlanSplitDate(DateFormatUtils.format(DateUtils.caculDays(new Date(),17),"yyyyMMdd"));
+        //pr.setPlanSplitDate(DateFormatUtils.format(DateUtils.caculDays(new Date(),17),"yyyyMMdd"));
         paymentRecordsService.save(pr);
 
         return paymentService.unifiedOrder(pr);
@@ -100,284 +94,157 @@ public class IposFeignController extends BaseFeignController {
     public VaultsResponse<List<SplitPay>> splitOrder(@RequestBody List<SplitInfo> list) {
 
         /**
-         * 分成顺序:平台自留->供应价/结算价->区域运营商分成->团长分成->站长分成->平台运营商
+         * 分成顺序:平台自留->供应价/结算价->平台运营商分成->区域运营商分成->团长分成/站长分成
          * 手续费:0.3%(由第三方提供)
-         * 分账金额=(总价-手续费)
-         * 分账 = 分账金额*99%;平台自留: 分账金额*1%
-         * 可分账 = 分账-供应价(结算价)
-         * 区域运营商分账 = 可分账 * 分账比例
-         * 剩余分账 = 可分账 - 区域运营商分账
-         * 团长分账 = 剩余分账 * 分账比例
-         * 站长分账 = 剩余分账 * 分账比例
-         * 平台运营商分账 = 可分账 - 区域运营商分账 -团长分账 -站长分账
+         * 分账总金额 = 支付金额-手续费
+         * 平台自留金额 = 分账总金额 * 平台自留分成比例
+         * 可分账金额 = 分账总金额 - 平台自留金额
+         * 应分账金额 = 可分账金额 - 供应商成本价
+         * 平台运营商分成金额 = 应分账金额 * 平台运营商分成比例
+         * 区域运营商分成金额 = 应分账金额 * 区域运营商分成比例
+         * 剩余分成金额 = 应分账金额 - 平台运营商分成金额 - 区域运营商分成金额
+         * 团长分成金额 = 剩余分成金额 * 团长分成比例
+         * 站长分成金额 = 剩余分成金额 * 站长分成比例
+         * 剩余未分账部分则归属到平台自留金额中
          */
-        log.info(JSON.toJSONString(list));
-
         List<SplitPay> returnList = Lists.newArrayList();
         for (SplitInfo splitInfo : list) {
-            BigDecimal proportion = BigDecimal.ONE.subtract(splitInfo.getOperatorSplitProportion());
-            //List<SplitRecords> splitRecordsList = Lists.newArrayList();
-            //TODO 暂时去掉三方支付
-            //YJ:一级供应商;FS:二级供应商,服务商;QY:供应商,区域运营商;TZ:团长;ZZ:站长;PT:平台
-          /* PaymentRecords pr = paymentRecordsService.getPaymentRecords(splitInfo.getPayId());
+           PaymentRecords pr = paymentRecordsService.getPaymentRecords(splitInfo.getPayId());
            if(pr == null){
                continue;
-           }*/
+           }
+           Long id = CgpTool.generateKey();
             List<SplitRecordsDetail> details = Lists.newArrayList();
             SplitRecords records = new SplitRecords();
             records.setOperatorId(splitInfo.getOperatorId());
-            records.setSplitId(CgpTool.generateKey());
+            records.setSplitId(id);
             records.setPayId(splitInfo.getPayId());
             records.setPaySn(splitInfo.getPaySn());
             records.setSumPrice(splitInfo.getSumPrice());
-            //手续费
-            BigDecimal chargeAmount = new BigDecimal(splitInfo.getCommissionMoney());
-            BigDecimal ptAmount = BigDecimal.ZERO;
-            BigDecimal tzAmount = BigDecimal.ZERO;
-            BigDecimal stationAmount = BigDecimal.ZERO;
-            BigDecimal ptyysAmount = BigDecimal.ZERO;
-            BigDecimal supplierOneAmount = BigDecimal.ZERO;
-            BigDecimal supplierTwoAmount = BigDecimal.ZERO;
-            BigDecimal supplierAmount = BigDecimal.ZERO;
-            /**
-             * 0.平台自留金额
-             */
-            //平台自留
+            //平台自留金额
             SplitRecordsDetail pt = new SplitRecordsDetail();
-            pt.setSplitId(records.getSplitId());
+            pt.setSplitId(id);
             pt.setSourceId(0);
-            for (SplitDetail detail : splitInfo.getDetails()) {
-                SplitPay sp = new SplitPay();
-                sp.setOrderId(detail.getOrderId());
-                sp.setSplitId(records.getSplitId());
-                //总分账金额 支付价-手续费
-                BigDecimal sumPrice = new BigDecimal(detail.getPrice()).subtract(chargeAmount);
-                //平台自留=总分账金额*1%
-                BigDecimal ptDecimal = sumPrice.multiply(proportion).setScale(0, RoundingMode.HALF_UP);
-                //可分金额=总分账金额-平台自留
-                BigDecimal price = sumPrice.subtract(ptDecimal);
-                detail.setPrice(price.longValue());
-                //平台自留金额
-                ptAmount = ptAmount.add(ptDecimal);
-                returnList.add(sp);
-                /**
-                 * 2.供应价/结算价 的分账(包含区域运营商/一级供应商/二级供应商/服务站)
-                 */
+            pt.setDivAmt(String.valueOf(splitInfo.getSelfCommissionMoney()));
+            details.add(pt);
+            //平台运营商
+            if(splitInfo.getIsSplitOperator() && splitInfo.getOperatorCommissionMoney() >0L){
+                SplitRecordsDetail ptyys = new SplitRecordsDetail();
+                ptyys.setSplitId(id);
+                ptyys.setSourceId(1);
+                ptyys.setMerchantId(splitInfo.getOperatorMerchantId());
+                ptyys.setDivAmt(splitInfo.getOperatorCommissionMoney().toString());
+                details.add(ptyys);
+            }
+
+            SplitDetail detail = splitInfo.getDetails().get(0);
+            //区域运营商
+            if(detail.getIsSplitSupplier() && detail.getSupplierMoney() >0L){
+               SplitRecordsDetail supplier = new SplitRecordsDetail();
+               supplier.setSplitId(id);
+               supplier.setSourceId(2);
+               supplier.setMerchantId(detail.getSupplierMerchantId());
+               supplier.setDivAmt(detail.getSupplierMoney().toString());
+               details.add(supplier);
+            }
+
+            //供应商
+            if(detail.getBelong().equals(1)){
                 //一级供应商
-                //TODO 暂时去掉三方支付
-                if(detail.getBelong().equals(1)){
-                //if(StringUtils.isNotEmpty(detail.getSupplierOneMerchantId()) && detail.getBelong().equals(1)){
+                if(detail.getIsSplitSupplierOne() && detail.getConsignmentPrice() >0L){
                     SplitRecordsDetail supplierOne = new SplitRecordsDetail();
-                    supplierOne.setSplitId(records.getSplitId());
+                    supplierOne.setSplitId(id);
                     supplierOne.setSourceId(3);
-                    //TODO 暂时去掉三方支付
-                    //supplierOne.setMerchantId(detail.getSupplierOneMerchantId());
-                    supplierOne.setMerchantId("YJ"+detail.getSupplierOneId().toString());
-                    for (SplitRecordsDetail splitRecordsDetail : details) {
-                        if(splitRecordsDetail.getMerchantId().equals(supplierOne.getMerchantId())){
-                            supplierOne = splitRecordsDetail;
-                            break;
-                        }
-                    }
-                    detail.setPrice(detail.getPrice()-detail.getConsignmentPrice());
-                    supplierOneAmount = supplierOneAmount.add(new BigDecimal(detail.getConsignmentPrice()));
-                    if (supplierOneAmount.compareTo(BigDecimal.ZERO) == 1) {
-                        supplierOne.setDivAmt(supplierOneAmount.toString());
-                        details.add(supplierOne);
-                    }
-                    //TODO 暂时去掉三方支付
-                }else if(detail.getBelong().equals(2)){
-               // }else if(StringUtils.isNotEmpty(detail.getServiceStationMerchantId()) && detail.getBelong().equals(2)){
-                    //二级供应商
+                    supplierOne.setMerchantId(detail.getSupplierOneMerchantId());
+                    supplierOne.setDivAmt(detail.getConsignmentPrice().toString());
+                    details.add(supplierOne);
+                }
+            }else if(detail.getBelong().equals(2)){
+                //二级供应商
+                if(detail.getIsSplitServiceStation() && detail.getConsignmentPrice() >0L){
                     SplitRecordsDetail supplierTwo = new SplitRecordsDetail();
-                    supplierTwo.setSplitId(records.getSplitId());
+                    supplierTwo.setSplitId(id);
                     supplierTwo.setSourceId(4);
-                    //TODO 暂时去掉三方支付
-                    supplierTwo.setMerchantId("FS"+detail.getServiceStationId().toString());
-                   // supplierTwo.setMerchantId(detail.getServiceStationMerchantId());
-                    boolean is_have = false;
-                    for (SplitRecordsDetail splitRecordsDetail : details) {
-
-                        if(splitRecordsDetail.getMerchantId().equals(supplierTwo.getMerchantId())){
-                            supplierTwo = splitRecordsDetail;
-                            is_have = true;
-                            break;
-                        }
-                    }
-                    detail.setPrice(detail.getPrice() - detail.getConsignmentPrice());
-                    supplierTwoAmount = supplierTwoAmount.add(new BigDecimal(detail.getConsignmentPrice()));
-
-                    if (supplierTwoAmount.compareTo(BigDecimal.ZERO) == 1) {
-                        supplierTwo.setDivAmt(supplierTwoAmount.toString());
-                        if(!is_have){
-                            details.add(supplierTwo);
-                        }
-
-                    }
-                }else if(detail.getBelong().equals(0)){
-                    //服务商
-                    //TODO 暂时去掉三方支付
-                    if(detail.getOrderType().equals(2) && !detail.getServiceStationId().equals(detail.getStationId())){
-                   // if(StringUtils.isNotEmpty(detail.getServiceStationMerchantId()) && detail.getOrderType().equals(2) && !detail.getServiceStationId().equals(detail.getStationId())){
+                    supplierTwo.setMerchantId(detail.getServiceStationMerchantId());
+                    supplierTwo.setDivAmt(detail.getConsignmentPrice().toString());
+                    details.add(supplierTwo);
+                }
+            }else{
+                //服务商
+                if(detail.getOrderType().equals(2) && !detail.getServiceStationId().equals(detail.getStationId())){
+                    if(detail.getIsSplitServiceStation() && detail.getSettlementPrice() >0L){
                         SplitRecordsDetail serviceStation = new SplitRecordsDetail();
-                        serviceStation.setSplitId(records.getSplitId());
+                        serviceStation.setSplitId(id);
                         serviceStation.setSourceId(5);
-                        //TODO 暂时去掉三方支付
-                        serviceStation.setMerchantId("FS"+detail.getServiceStationId().toString());
-                        //serviceStation.setMerchantId(detail.getServiceStationMerchantId());
-                        boolean is_have = false;
-                        for (SplitRecordsDetail splitRecordsDetail : details) {
-                            if(splitRecordsDetail.getMerchantId().equals(serviceStation.getMerchantId())){
-                                serviceStation = splitRecordsDetail;
-                                is_have=true;
-                                break;
-                            }
-                        }
-                        stationAmount = stationAmount.add(new BigDecimal(detail.getSettlementPrice()));
-                        detail.setPrice(detail.getPrice() - detail.getSettlementPrice());
-                        if (stationAmount.compareTo(BigDecimal.ZERO) == 1) {
-                            serviceStation.setDivAmt(stationAmount.toString());
-                            if(!is_have){
-                                details.add(serviceStation);
-                            }
-
-                        }
-                        //TODO 暂时去掉三方支付
-                    }else{
-                   // }else if(StringUtils.isNotEmpty(detail.getSupplierMerchantId())){
-                        //供应商
-                        if(detail.getOrderType().equals(1) ||(detail.getOrderType().equals(2)&&detail.getStationId().equals(detail.getServiceStationId()))){
-                            boolean is_have = false;
-                            SplitRecordsDetail supplier = new SplitRecordsDetail();
-                            supplier.setSplitId(records.getSplitId());
-                            supplier.setSourceId(2);
-                            //TODO 暂时去掉三方支付
-                            supplier.setMerchantId("QY"+detail.getSupplierId().toString());
-                            //supplier.setMerchantId(detail.getSupplierMerchantId());
-                            for (SplitRecordsDetail splitRecordsDetail : details) {
-                                if(splitRecordsDetail.getMerchantId().equals(supplier.getMerchantId())){
-                                    supplier = splitRecordsDetail;
-                                    is_have =true;
-                                    break;
-                                }
-                            }
-                            supplierAmount = supplierAmount.add(new BigDecimal(detail.getSettlementPrice()));
-                            detail.setPrice(detail.getPrice()-detail.getSettlementPrice());
-                            if (supplierAmount.compareTo(BigDecimal.ZERO) == 1) {
-                                supplier.setDivAmt(supplierAmount.toString());
-                                if(!is_have){
-                                    details.add(supplier);
-                                }
-                            }
-                        }
-
+                        serviceStation.setMerchantId(detail.getServiceStationMerchantId());
+                        serviceStation.setDivAmt(detail.getSettlementPrice().toString());
+                        details.add(serviceStation);
                     }
-                }
-                    /**
-                     * 3.分成
-                     */
-                    //区域运营商
-                    if(detail.getSupplierMoney()!= null && detail.getSupplierMoney()>0L){
-                        SplitRecordsDetail supplier = new SplitRecordsDetail();
-                        supplier.setSplitId(records.getSplitId());
-                        supplier.setSourceId(2);
-                        //TODO 暂时去掉三方支付
-                        supplier.setMerchantId("QY"+detail.getSupplierId().toString());
-                        //supplier.setMerchantId(detail.getSupplierMerchantId());
-                        boolean is_have = false;
-                        for (SplitRecordsDetail splitRecordsDetail : details) {
-                            if(splitRecordsDetail.getMerchantId().equals(supplier.getMerchantId())){
-                                supplier = splitRecordsDetail;
-                                is_have =true;
-                                break;
-                            }
-                        }
-                        supplierAmount = supplierAmount.add(new BigDecimal(detail.getSupplierMoney()));
-                        detail.setPrice(detail.getPrice()-detail.getSupplierMoney());
-                        if (supplierAmount.compareTo(BigDecimal.ZERO) == 1) {
-                            supplier.setDivAmt(supplierAmount.toString());
-                            if(!is_have){
-                                details.add(supplier);
-                            }
+                }else{
+                    //供应商
+                    SplitRecordsDetail supplier = new SplitRecordsDetail();
+                    supplier.setSplitId(id);
+                    supplier.setSourceId(2);
+                    supplier.setMerchantId(detail.getSupplierMerchantId());
+                    supplier.setDivAmt(detail.getSettlementPrice().toString());
+                    Boolean isHave = false;
+                    for (SplitRecordsDetail splitRecordsDetail : details) {
+                        if(splitRecordsDetail.getSourceId().equals(2) && supplier.getMerchantId().equals(splitRecordsDetail.getMerchantId())){
+                            Long val = Long.parseLong(splitRecordsDetail.getDivAmt())+detail.getSettlementPrice();
+                            splitRecordsDetail.setDivAmt(val.toString());
+                            isHave = true;
+                            break;
                         }
                     }
-
-                    //团长
-                //TODO 暂时去掉三方支付
-                if(detail.getGroupCommissionMoney() != null && detail.getGroupCommissionMoney()>0L){
-                   // if(detail.getGroupCommissionMoney() != null && detail.getGroupCommissionMoney()>0L &&StringUtils.isNotBlank(detail.getGroupLeaderMerchantId())){
-                        SplitRecordsDetail tz = new SplitRecordsDetail();
-                        tz.setSplitId(records.getSplitId());
-                        tz.setSourceId(6);
-                        //TODO 暂时去掉三方支付
-                        tz.setMerchantId("TZ"+detail.getGroupLeaderId().toString());
-                       // tz.setMerchantId(detail.getGroupLeaderMerchantId());
-                        boolean is_have = false;
-                        for (SplitRecordsDetail splitRecordsDetail : details) {
-                            if(splitRecordsDetail.getMerchantId().equals(tz.getMerchantId())){
-                                tz = splitRecordsDetail;
-                                is_have =true;
-                                break;
-                            }
-                        }
-                        tzAmount = tzAmount.add(new BigDecimal(detail.getGroupCommissionMoney()));
-                        detail.setPrice(detail.getPrice()-detail.getGroupCommissionMoney());
-                        if (tzAmount.compareTo(BigDecimal.ZERO) == 1) {
-                            tz.setDivAmt(tzAmount.toString());
-                            if(!is_have){
-                                details.add(tz);
-                            }
-                        }
-                    }
-                    //站长
-                //TODO 暂时去掉三方支付
-                if(detail.getStationmasterCommissionMoney() != null && detail.getStationmasterCommissionMoney()>0L){
-                   // if(detail.getStationmasterCommissionMoney() != null && detail.getStationmasterCommissionMoney()>0L&&StringUtils.isNotBlank(detail.getStationmasterMerchantId())){
-                        SplitRecordsDetail station = new SplitRecordsDetail();
-                        station.setSplitId(records.getSplitId());
-                        station.setSourceId(5);
-                        //TODO 暂时去掉三方支付
-                        station.setMerchantId("ZZ"+detail.getStationId().toString());
-                        //station.setMerchantId(detail.getStationmasterMerchantId());
-                        Boolean is_have = false;
-                        for (SplitRecordsDetail splitRecordsDetail : details) {
-                            if(splitRecordsDetail.getMerchantId().equals(station.getMerchantId())){
-                                station = splitRecordsDetail;
-                                is_have =true;
-                                break;
-                            }
-                        }
-                        stationAmount = stationAmount.add(new BigDecimal(detail.getStationmasterCommissionMoney()));
-                        detail.setPrice(detail.getPrice()-detail.getStationmasterCommissionMoney());
-                        if (stationAmount.compareTo(BigDecimal.ZERO) == 1) {
-                            station.setDivAmt(stationAmount.toString());
-                            if(!is_have){
-                                details.add(station);
-                            }
-                        }
+                    if(!isHave && detail.getSettlementPrice() >0L){
+                        details.add(supplier);
                     }
+                }
+            }
 
-                    if(detail.getPrice()>0L){
-                        ptyysAmount = ptyysAmount.add(new BigDecimal(detail.getPrice()));
+            //团长
+            if(detail.getIsSplitGroupLeader() && detail.getGroupCommissionMoney() >0L){
+                SplitRecordsDetail tz = new SplitRecordsDetail();
+                tz.setSplitId(id);
+                tz.setSourceId(6);
+                tz.setMerchantId(detail.getGroupLeaderMerchantId());
+                tz.setDivAmt(detail.getGroupCommissionMoney().toString());
+                details.add(tz);
+            }
+            //站长
+            if(detail.getIsSplitStation() && detail.getStationmasterCommissionMoney()>0L){
+                SplitRecordsDetail station = new SplitRecordsDetail();
+                station.setSplitId(id);
+                station.setSourceId(5);
+                station.setMerchantId(detail.getStationmasterMerchantId());
+                station.setDivAmt(detail.getStationmasterCommissionMoney().toString());
+                Boolean isHave = false;
+                for (SplitRecordsDetail splitRecordsDetail : details) {
+                    if(splitRecordsDetail.getSourceId().equals(5) && station.getMerchantId().equals(splitRecordsDetail.getMerchantId())){
+                        Long val = Long.parseLong(splitRecordsDetail.getDivAmt())+detail.getStationmasterCommissionMoney();
+                        splitRecordsDetail.setDivAmt(val.toString());
+                        isHave = true;
+                        break;
                     }
                 }
-            pt.setDivAmt(String.valueOf(ptAmount.longValue()));
-            details.add(pt);
+                if(!isHave){
+                    details.add(station);
+                }
 
-            //平台运营商
-            SplitRecordsDetail ptyys = new SplitRecordsDetail();
-            ptyys.setSplitId(records.getSplitId());
-            ptyys.setSourceId(1);
-            //TODO 暂时去掉三方支付
-            ptyys.setMerchantId("PT"+splitInfo.getOperatorId().toString());
-            ptyys.setDivAmt(ptyysAmount.toString());
-            details.add(ptyys);
-            //TODO 暂时去掉三方支付
-           /* VaultsResponse vaultsResponse = splitService.delayConfirm(records,details);
+            }
+
+            VaultsResponse vaultsResponse = splitService.delayConfirm(records,details);
             if(!vaultsResponse.validate()){
                 records.setComment(vaultsResponse.getMessage());
-            }*/
-            records.setStatus(2);
+                records.setStatus(3);
+            }else{
+                records.setStatus(2);
+                //回写
+                SplitPay sp = new SplitPay();
+                sp.setOrderId(detail.getOrderId());
+                sp.setSplitId(id);
+                returnList.add(sp);
+            }
             splitRecordsService.save(records);
             splitRecordsDetailService.saveBatch(details);
         }

+ 19 - 1
src/main/java/com/poteviohealth/ym/ipos/model/detail/SplitInfo.java

@@ -12,9 +12,27 @@ import java.util.List;
 @Data
 public class SplitInfo {
 
-    @ApiModelProperty(value = "分账方自留金额,单位为分,可传0表示不自留\t",required = true)
+    /**
+     * N:不使用净值分账
+     * Y:使用净值分账
+     * 不传默认为N,即不使用净值分账
+     * 净值分账目前仅对部分通道开放,使用此能力前请先与技术支持确认
+     * 净值分账仅在交易手续费内扣时才起作用
+     * 当使用净值分账时,分账信息和分账明细必须要传分账比例,且分账方自留比例(keep_percentage)与所有分账比例(div_percentage)之和必须要为100%
+     */
+    @ApiModelProperty(value = "N:不使用净值分账 Y:使用净值分账")
+    private String is_clean_split;
+
+    @ApiModelProperty(value = "分账方自留金额,单位为分,可传0表示不自留")
     private String keep_amt;
 
+    /**
+     * 分账方自留比例,单位为%,最多支持小数点后两位,可传0表示不自留
+     * 使用净值分账(is_clean_split=Y)时,该节点必填,分账方自留金额(keep_amt)节点无效
+     */
+    @ApiModelProperty(value = "分账方自留比例")
+    private String keep_percentage;
+
     @ApiModelProperty(value = "分账明细",required = true)
     private List<SplitList> split_list;
 }

+ 8 - 1
src/main/java/com/poteviohealth/ym/ipos/model/detail/SplitList.java

@@ -13,6 +13,13 @@ public class SplitList {
     @ApiModelProperty(value = "分账接收方的分账商户号",required = true)
     private String merchant_id;
 
-    @ApiModelProperty(value = "分账金额,单位为分,必须大于0",required = true)
+    @ApiModelProperty(value = "分账金额,单位为分,必须大于0")
     private String div_amt;
+
+    /**
+     * 分账比例,单位为%,最多支持小数点后两位,必须大于0
+     * 使用净值分账(is_clean_split=Y)时,该节点必填,分账金额(div_amt)节点无效
+     */
+    @ApiModelProperty(value = "分账比例")
+    private String div_percentage;
 }

+ 4 - 0
src/main/java/com/poteviohealth/ym/ipos/model/merchant/dto/SearchDto.java

@@ -14,4 +14,8 @@ public class SearchDto {
     private String phone;
 
     private String merchantId;
+
+    private Integer sourceId;
+
+    private Integer id;
 }

+ 31 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/PayNotification.java

@@ -13,6 +13,9 @@ public class PayNotification{
     @ApiModelProperty(value = "签名",required = true)
     private String sign;
 
+    @ApiModelProperty(value = "1:交易结果通知;3:资金解冻通知")
+    private String notify_type;
+
     @ApiModelProperty(value = "商户号,交易的翼码商户号",required = true)
     private String isspid;
 
@@ -59,6 +62,9 @@ public class PayNotification{
     @ApiModelProperty(value = "交易完成时间,格式:YYYYMMDDHH24MISS")
     private String end_time;
 
+    @ApiModelProperty(value = "子商户应用ID,微信的APPID")
+    private String sub_appid;
+
     /**
      * 支付宝:用户登录帐号(带星号脱敏)
      * 微信/微信小程序:用户open_id
@@ -89,6 +95,9 @@ public class PayNotification{
     @ApiModelProperty(value = "支付平台订单号,支付平台的订单号,仅成功时有值")
     private String trade_no;
 
+    @ApiModelProperty(value = "外卡标识 0:不是外卡 1:是外卡")
+    private String is_foreign_card;
+
     @ApiModelProperty(value = "商家优惠金额,单位为分,仅成功时有值")
     private Integer buss_discount_amt;
 
@@ -100,4 +109,26 @@ public class PayNotification{
 
     @ApiModelProperty(value = "用户号,仅快捷支付(pay_type=518),成功时有值")
     private String user_yima_id;
+
+    @ApiModelProperty(value = "ATU订单号 支付宝/微信/银联订单号 客户手机支付凭证上的订单号")
+    private String atu_trade_no;
+
+    @ApiModelProperty(value = "ATU商户订单号 支付宝/微信/银联商户订单号 客户手机支付凭证上的商户订单号")
+    private String atu_out_trade_no;
+
+    @ApiModelProperty(value = "发卡行编码 该字段是否有值取决于支付通道是否返回")
+    private String bank_code;
+
+    @ApiModelProperty(value = "资金冻结状态 01:冻结 02:解冻")
+    private String fund_freeze_stat;
+
+    @ApiModelProperty(value = "冻结时间 格式:yyyyMMddHHmmss")
+    private String freeze_time;
+
+    @ApiModelProperty(value = "解冻金额 单位:分")
+    private String unfreeze_amt;
+
+    @ApiModelProperty(value = "解冻时间 格式:yyyyMMddHHmmss")
+    private String unfreeze_time;
+
 }

+ 15 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/PaymentRecords.java

@@ -74,4 +74,19 @@ public class PaymentRecords extends BaseEntity {
 
     @ApiModelProperty(value = "手续费,单位为分,仅成功时有值")
     private Integer chargeAmount;
+
+    @ApiModelProperty(value = "1:交易结果通知;3:资金解冻通知")
+    private String notifyType;
+
+    @ApiModelProperty(value = "资金冻结状态 01:冻结 02:解冻")
+    private String fundFreezeStat;
+
+    @ApiModelProperty(value = "冻结时间 格式:yyyyMMddHHmmss")
+    private String freezeTime;
+
+    @ApiModelProperty(value = "解冻金额 单位:分")
+    private String unfreezeAmt;
+
+    @ApiModelProperty(value = "解冻时间 格式:yyyyMMddHHmmss")
+    private String unfreezeTime;
 }

+ 17 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/back/PayQueryBack.java

@@ -60,6 +60,23 @@ public class PayQueryBack extends BaseBack {
     @ApiModelProperty(value = "订单备注,返回支付请求时内容")
     private String memo;
 
+    /**
+     * 01:冻结
+     * 02:解冻
+     * 空表示无此类业务
+     */
+    @ApiModelProperty(value = "资金冻结状态")
+    private String fund_freeze_stat;
+
+    @ApiModelProperty(value = "冻结时间,格式:yyyyMMddHHmmss")
+    private String freeze_time;
+
+    @ApiModelProperty(value = "解冻金额,单位:分")
+    private String unfreeze_amt;
+
+    @ApiModelProperty(value = "解冻时间,格式:yyyyMMddHHmmss")
+    private String unfreeze_time;
+
     @ApiModelProperty(value = "支付宝支付的时候")
     private AlipayResInfo alipay_res_info;
 

+ 8 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/back/PayReverseBack.java

@@ -39,6 +39,14 @@ public class PayReverseBack extends BaseBack {
     @ApiModelProperty(value = "平台优惠金额,单位为分")
     private String platform_discount_amt;
 
+    /**
+     * 退款发生时,对应原支付交易的资金冻结状态
+     * 01:冻结
+     * 02:解冻
+     */
+    @ApiModelProperty(value = "资金冻结状态")
+    private String fund_freeze_stat;
+
     @ApiModelProperty(value = "支付宝退款的时候")
     private AlipayReverseInfo alipay_res_info;
 

+ 9 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/PayDetail.java

@@ -12,12 +12,21 @@ import java.util.List;
 @Data
 public class PayDetail {
 
+    /**
+     * 502:支付宝
+     * 503:微信支付
+     * 512:银联二维码
+     * 521:聚分期
+     */
     @ApiModelProperty(value = "515:微信小程序",required = true)
     private String pay_type="515";
 
     @ApiModelProperty(value = "交易类型,微信小程序取值如下:JSAPI",required = true)
     private String trade_type="JSAPI";
 
+    @ApiModelProperty(value = "子商户应用ID:发起交易商户号所绑定的小程序appid 如果有传appid就使用传的appid进行交易 如果没传就使用系统中配置的appid进行交易")
+    private String sub_appid;
+
     @ApiModelProperty(value = "用户标识:微信小程序:用户在商户appid下的唯一标识(openid)")
     private String buyer_id;
 

+ 1 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/PayQueryDetail.java

@@ -17,6 +17,7 @@ public class PayQueryDetail {
      * 515:小程序支付
      * 516:数字人民币
      * 519:会员余额支付
+     * 521:聚分期
      */
     @ApiModelProperty(value = "支付类型")
     private String pay_type="515";

+ 4 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/PayReverseDetail.java

@@ -19,6 +19,7 @@ public class PayReverseDetail {
      * 515:小程序支付
      * 516:数字人民币
      * 519:会员余额支付
+     * 521:聚分期
      */
     @ApiModelProperty(value = "支付类型")
     private String pay_type ="515";
@@ -34,4 +35,7 @@ public class PayReverseDetail {
 
     @ApiModelProperty(value = "扩展参数")
     private ExtendParamsReverse extend_params;
+
+    @ApiModelProperty(value = "异步通知地址")
+    private String notify_url;
 }

+ 1 - 1
src/main/java/com/poteviohealth/ym/ipos/model/split/SplitRecords.java

@@ -32,7 +32,7 @@ public class SplitRecords extends BaseEntity {
     @ApiModelProperty(value = "总金额")
     private Long sumPrice;
 
-    @ApiModelProperty(value = "分账状态:0,未分账.1.成功,2.交易处理中")
+    @ApiModelProperty(value = "分账状态:0,未分账.1.成功,2.交易处理中,3.分账失败")
     private Integer status;
 
     @ApiModelProperty(value = "失败原因")

+ 19 - 0
src/main/java/com/poteviohealth/ym/ipos/model/split/back/PayConfirmQueryBack.java

@@ -1,9 +1,12 @@
 package com.poteviohealth.ym.ipos.model.split.back;
 
 import com.poteviohealth.ym.ipos.model.back.BaseBack;
+import com.poteviohealth.ym.ipos.model.split.detail.SplitListConfirm;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * 延时交易确认查询返回值
  * @author Qin
@@ -26,4 +29,20 @@ public class PayConfirmQueryBack extends BaseBack {
     @ApiModelProperty(value = "退回状态")
     private String refund_status;
 
+    /**
+     * s:成功
+     * c:待确认
+     * p:处理中
+     * f:失败
+     * p:申请成功
+     * r:已全额退回
+     * b:部分退回
+     * z:部分成功
+     * 交易成功时必填
+     */
+    @ApiModelProperty(value = "交易状态")
+    private String trade_status;
+
+    private List<SplitListConfirm> split_detail_list;
+
 }

+ 3 - 0
src/main/java/com/poteviohealth/ym/ipos/model/split/detail/AccountBalanceList.java

@@ -22,6 +22,9 @@ public class AccountBalanceList {
     @ApiModelProperty(value = "冻结余额(分)")
     private Integer frz_amt;
 
+    @ApiModelProperty(value = "管控金额(分),该金额包含在冻结金额中")
+    private Integer control_amt;
+
     @ApiModelProperty(value = "昨日日终余额(分)")
     private Integer last_avl_amt;
 

+ 20 - 0
src/main/java/com/poteviohealth/ym/ipos/model/split/detail/SplitListConfirm.java

@@ -13,6 +13,26 @@ public class SplitListConfirm {
     @ApiModelProperty(value = "分账接收方的分账商户号,当支付单类型不是账户支付时必填")
     private String merchant_id;
 
+    @ApiModelProperty(value = "商户类型,a:商户 b:收款账户")
+    private String mch_type;
+
+    @ApiModelProperty(value = "类型,a:参与分账 b:收款账户自留")
+    private String type;
+
+    /**
+     * s:成功
+     * c:待确认
+     * p:处理中
+     * f:失败
+     * p:申请成功
+     * r:已全额退回
+     * b:部分退回
+     * z:部分成功
+     * 交易成功时必填
+     */
+    @ApiModelProperty(value = "交易状态")
+    private String trade_state;
+
     @ApiModelProperty(value = "分账接收方的收款账户编号,当支付单类型是账户支付时可选,分账商户号与收款账户编号二选一必填")
     private String seller_account;
 

+ 9 - 1
src/main/java/com/poteviohealth/ym/ipos/service/IMerchantService.java

@@ -3,8 +3,8 @@ package com.poteviohealth.ym.ipos.service;
 import com.poteviohealth.cgp.common.model.VaultsResponse;
 import com.poteviohealth.ym.ipos.model.merchant.back.UserSearchBack;
 import com.poteviohealth.ym.ipos.model.merchant.dto.ImageDto;
+import com.poteviohealth.ym.ipos.model.merchant.dto.SearchDto;
 import com.poteviohealth.ym.ipos.model.merchant.dto.UserDto;
-import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 商户入驻接口
@@ -33,4 +33,12 @@ public interface IMerchantService {
      * @return
      */
      VaultsResponse<UserSearchBack> merchantQuery(String phone, String merchantId);
+
+
+    /**
+     * 分账商户查询
+     * @param dto
+     * @return
+     */
+    VaultsResponse<UserSearchBack> merchantQuery(SearchDto dto);
 }

+ 31 - 8
src/main/java/com/poteviohealth/ym/ipos/service/impl/MerchantServiceImpl.java

@@ -5,9 +5,11 @@ import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
 import com.poteviohealth.cgp.common.facade.cache.CacheService;
 import com.poteviohealth.cgp.common.filter.TokenContext;
+import com.poteviohealth.cgp.common.integrated.EntityIdParams;
 import com.poteviohealth.cgp.common.integrated.OperatorIdParams;
 import com.poteviohealth.cgp.common.integrated.customer.CustomerFeignClient;
 import com.poteviohealth.cgp.common.integrated.partner.PartnerFeignClient;
+import com.poteviohealth.cgp.common.integrated.partner.model.OperatorDTO;
 import com.poteviohealth.cgp.common.model.VaultsResponse;
 import com.poteviohealth.ym.ipos.common.Basic;
 import com.poteviohealth.ym.ipos.model.BasicConfiguration;
@@ -20,6 +22,7 @@ import com.poteviohealth.ym.ipos.model.merchant.back.UserSearchBack;
 import com.poteviohealth.ym.ipos.model.merchant.detail.*;
 import com.poteviohealth.ym.ipos.model.merchant.dto.ImageDto;
 import com.poteviohealth.ym.ipos.model.merchant.dto.ImageListDto;
+import com.poteviohealth.ym.ipos.model.merchant.dto.SearchDto;
 import com.poteviohealth.ym.ipos.model.merchant.dto.UserDto;
 import com.poteviohealth.ym.ipos.model.payment.dto.BindDto;
 import com.poteviohealth.ym.ipos.service.IAreaService;
@@ -132,7 +135,7 @@ public class MerchantServiceImpl implements IMerchantService {
             //修改开户/入驻信息
             VaultsResponse<String> indvmodifyVault = this.modifyVault(dto);
             if(!indvmodifyVault.validate()){
-                log.info("indvmodifyVault==="+indvmodifyVault);
+                log.info("indvmodifyVault==="+JSONObject.toJSONString(indvmodifyVault));
                 return indvmodifyVault;
             }
             VaultsResponse<String> openModifyVault = this.merchantOpenModify(dto);
@@ -281,9 +284,9 @@ public class MerchantServiceImpl implements IMerchantService {
         if(source.equals(3)){
             vaultsResponse =  customerFeignClient.updateMerchantId(operatorIdParams);
         }else{
-            if(proportion != null){
+           /* if(proportion != null){
                 operatorIdParams.setProportion(proportion.divide(new BigDecimal(100.0)));
-            }
+            }*/
             vaultsResponse =  partnerFeignClient.updateMerchantId(operatorIdParams);
         }
 
@@ -620,13 +623,21 @@ public class MerchantServiceImpl implements IMerchantService {
      */
     @Override
     public VaultsResponse<UserSearchBack> merchantQuery(String phone, String merchantId){
+        SearchDto dto = new SearchDto();
+        dto.setPhone(phone);
+        dto.setMerchantId(merchantId);
+        return this.merchantQuery(dto);
+    }
+
+    @Override
+    public VaultsResponse<UserSearchBack> merchantQuery(SearchDto dto) {
         UserSearch userSearch = new UserSearch();
         BasicConfiguration bc = Basic.getSystemParameter(TokenContext.cureOperatorId());
         userSearch.setSystem_id(bc.getSystemId());
         userSearch.setIsspid(bc.getPid());
         UserSearchDetail detail = new UserSearchDetail();
-        detail.setPhone(phone);
-        detail.setMerchant_id(merchantId);
+        detail.setPhone(dto.getPhone());
+        detail.setMerchant_id(dto.getMerchantId());
         userSearch.setMerchant_query_request(detail);
         UserSearchBack back = null;
         try {
@@ -638,10 +649,21 @@ public class MerchantServiceImpl implements IMerchantService {
             }
             back = JSONObject.toJavaObject(jsonObject, UserSearchBack.class);
 
-            if(cacheService.exists("supplier_pro")){
-                back.setProportion(new BigDecimal(cacheService.get("supplier_pro")).multiply(new BigDecimal(100)));
+            if(dto.getId() != null && dto.getSourceId() != null){
+                EntityIdParams entityIdParams = new EntityIdParams();
+                entityIdParams.setId(dto.getId());
+                if (dto.getSourceId().equals(1)){
+                    VaultsResponse<OperatorDTO> vaultsResponse = partnerFeignClient.getOperator(entityIdParams);
+                    if(vaultsResponse.validate()){
+                        back.setProportion(vaultsResponse.getData().getSplitProportion().multiply(new BigDecimal(100)));
+                    }
+                }else{
+                    VaultsResponse<OperatorDTO> vaultsResponse = partnerFeignClient.getSupplier(entityIdParams);
+                    if(vaultsResponse.validate()){
+                        back.setProportion(vaultsResponse.getData().getSplitProportion().multiply(new BigDecimal(100)));
+                    }
+                }
             }
-
         } catch (IllegalAccessException e) {
             e.printStackTrace();
             return VaultsResponse.failed(e.getMessage());
@@ -653,6 +675,7 @@ public class MerchantServiceImpl implements IMerchantService {
             return VaultsResponse.success(null);
         }
         return VaultsResponse.failed();
+
     }
 
 }

+ 40 - 22
src/main/java/com/poteviohealth/ym/ipos/service/impl/PaymentServiceImpl.java

@@ -230,32 +230,50 @@ public class PaymentServiceImpl implements IPaymentService {
         queryMapper.eq("pay_id",payNotification.getPos_seq());
         try {
             PaymentRecords pr = paymentRecordsService.getOne(queryMapper);
-            if(pr.getStatus() == -1){
-                pr.setStatus(Integer.parseInt(payNotification.getStatus()));
-                pr.setEndTime(payNotification.getEnd_time());
-                pr.setSource(payNotification.getSource());
-                pr.setPosId(payNotification.getPos_id());
-                pr.setStoreId(payNotification.getStore_id());
-                pr.setPayType(payNotification.getPay_type());
-                pr.setTransType(payNotification.getTrans_type());
-                pr.setTradeNo(payNotification.getTrade_no());
-                pr.setChargeAmount(payNotification.getCharge_amount());
-                PayReceive payReceive = new PayReceive();
-                payReceive.setPayId(pr.getPayId());
-                payReceive.setPaySn(pr.getPaySn());
-                payReceive.setOperatorId(pr.getOperatorId());
-                payReceive.setTradeNo(payNotification.getPos_seq());
-                VaultsResponse vaultsResponse = orderFeignClient.changeOrderPay(payReceive);
-                if(vaultsResponse.validate()){
-                    paymentRecordsService.updateById(pr);
-                }else {
-                    return "fail";
+            if(payNotification.getNotify_type().equals("1")){
+                //支付通知
+                if(pr.getStatus() == -1){
+                    pr.setStatus(Integer.parseInt(payNotification.getStatus()));
+                    pr.setEndTime(payNotification.getEnd_time());
+                    pr.setSource(payNotification.getSource());
+                    pr.setPosId(payNotification.getPos_id());
+                    pr.setStoreId(payNotification.getStore_id());
+                    pr.setPayType(payNotification.getPay_type());
+                    pr.setTransType(payNotification.getTrans_type());
+                    pr.setTradeNo(payNotification.getTrade_no());
+                    pr.setChargeAmount(payNotification.getCharge_amount());
+                    pr.setFundFreezeStat(payNotification.getFund_freeze_stat());
+                    pr.setNotifyType(payNotification.getNotify_type());
+                    PayReceive payReceive = new PayReceive();
+                    payReceive.setPayId(pr.getPayId());
+                    payReceive.setPaySn(pr.getPaySn());
+                    payReceive.setOperatorId(pr.getOperatorId());
+                    payReceive.setTradeNo(payNotification.getPos_seq());
+                    VaultsResponse vaultsResponse = orderFeignClient.changeOrderPay(payReceive);
+                    if(vaultsResponse.validate()){
+                        paymentRecordsService.updateById(pr);
+                    }else {
+                        return "fail";
+                    }
+
+                }else{
+                    log.info("重复推送支付成功消息---"+pr.getPaySn());
                 }
-
             }else{
-                log.info("重复推送支付成功消息---"+pr.getPaySn());
+                //解冻通知
+                if(pr.getFundFreezeStat().equals("01")){
+                    pr.setFundFreezeStat(payNotification.getFund_freeze_stat());
+                    pr.setFreezeTime(payNotification.getFreeze_time());
+                    pr.setUnfreezeAmt(payNotification.getUnfreeze_amt());
+                    pr.setUnfreezeTime(payNotification.getUnfreeze_time());
+                    //调用分账通知
+                    paymentRecordsService.updateById(pr);
+                }else{
+                    log.info("重复推送解冻消息---"+pr.getPaySn());
+                }
             }
 
+
         }catch (Exception e){
             e.printStackTrace();
             return "fail";

+ 3 - 1
src/main/java/com/poteviohealth/ym/ipos/service/impl/SplitServiceImpl.java

@@ -72,7 +72,9 @@ public class SplitServiceImpl implements ISplitService {
             SplitListConfirm slc = new SplitListConfirm();
             slc.setMerchant_id(recordsDetail.getMerchantId());
             slc.setDiv_amt(recordsDetail.getDivAmt());
-            list.add(slc);
+            if(!slc.getDiv_amt().equals("0")){
+                list.add(slc);
+            }
         }
 
         splitInfoConfirm.setKeep_amt(amt);