Prechádzať zdrojové kódy

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

chengxiaowen 1 rok pred
rodič
commit
51df289fbc

+ 32 - 2
src/main/java/com/poteviohealth/ym/ipos/controller/SettlementController.java

@@ -4,6 +4,7 @@ import com.poteviohealth.cgp.common.controller.BaseWebController;
 import com.poteviohealth.cgp.common.facade.log.OperateType;
 import com.poteviohealth.cgp.common.facade.log.OperationLog;
 import com.poteviohealth.cgp.common.filter.TokenContext;
+import com.poteviohealth.cgp.common.integrated.IntegerParams;
 import com.poteviohealth.cgp.common.integrated.StringParams;
 import com.poteviohealth.cgp.common.model.CommonPage;
 import com.poteviohealth.cgp.common.model.VaultsResponse;
@@ -41,6 +42,8 @@ public class SettlementController extends BaseWebController {
     private ISplitWithdrawService splitWithdrawService;
 
 
+
+
     @PostMapping("/merchantQuery")
     @ApiOperation(value = "结算查询")
     @OperationLog(type = OperateType.SELECT, description ="结算查询")
@@ -70,7 +73,6 @@ public class SettlementController extends BaseWebController {
         return splitService.withdraw(dto);
     }
 
-
     @PostMapping("/withdrawQuery")
     @ApiOperation(value = "取现查询")
     @OperationLog(type = OperateType.SELECT, description ="取现查询")
@@ -81,7 +83,35 @@ public class SettlementController extends BaseWebController {
     @PostMapping("/list")
     @ApiOperation(value = "取现记录",notes = "list")
     public VaultsResponse<CommonPage<SplitWithdraw>> list(@RequestBody SplitWithdrawDto dto){
-        dto.setIposMerchantId(TokenContext.cureWebUser().getIposMerchantId());
+       // dto.setIposMerchantId(TokenContext.cureWebUser().getIposMerchantId());
         return VaultsResponse.success(splitWithdrawService.pageList(dto));
     }
+
+    @PostMapping("/withdrawSuccess")
+    @ApiOperation(value = "提现申请通过")
+    @OperationLog(type = OperateType.SELECT, description ="提现申请通过")
+    public VaultsResponse withdrawSuccess(@RequestBody IntegerParams params) {
+
+        SplitWithdraw splitWithdraw = splitWithdrawService.getById(params.getId());
+        splitWithdraw.setTransStatus("s");
+        splitWithdrawService.withdrawSuccess(TokenContext.cureOperatorId(),splitWithdraw.getId());
+        splitWithdrawService.updateById(splitWithdraw);
+        splitWithdrawService.successSend(splitWithdraw);
+        return VaultsResponse.success();
+    }
+
+
+    @PostMapping("/withdrawFail")
+    @ApiOperation(value = "提现申请驳回")
+    @OperationLog(type = OperateType.SELECT, description ="提现申请驳回")
+    public VaultsResponse withdrawFail(@RequestBody IntegerParams params) {
+
+        SplitWithdraw splitWithdraw = splitWithdrawService.getById(params.getId());
+        splitWithdraw.setTransStatus("f");
+        splitWithdraw.setErrorMsg(params.getName());
+        splitWithdrawService.withdrawFail(TokenContext.cureOperatorId(),splitWithdraw.getId());
+        splitWithdrawService.updateById(splitWithdraw);
+        splitWithdrawService.failSend(splitWithdraw);
+        return VaultsResponse.success();
+    }
 }

+ 57 - 11
src/main/java/com/poteviohealth/ym/ipos/controller/app/SettlementAppController.java

@@ -1,5 +1,6 @@
 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;
@@ -10,10 +11,12 @@ 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;
@@ -28,6 +31,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;
 
 /**
  * 结算管理app
@@ -45,7 +50,6 @@ public class SettlementAppController extends BaseWebController {
     @Resource
     private CustomerFeignClient customerFeignClient;
 
-
     @PostMapping("/merchantQuery")
     @ApiOperation(value = "结算查询")
     @OperationLog(type = OperateType.SELECT, description ="结算查询")
@@ -62,7 +66,8 @@ public class SettlementAppController extends BaseWebController {
     @OperationLog(type = OperateType.SELECT, description ="单账户查询")
     public VaultsResponse<AccountBalanceBack> accountBalanceQuery(@RequestBody StringParams params) {
 
-        if(StringUtils.isEmpty(params.getId())){
+        //TODO 暂时去掉三方支付
+      /*  if(StringUtils.isEmpty(params.getId())){
             String ipos = TokenContext.cureMiniUser().getIposMerchantId();
             if(StringUtils.isEmpty(ipos)){
                 return VaultsResponse.failed("账户未激活,请联系管理员");
@@ -70,7 +75,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());
+        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);
     }
 
 
@@ -79,7 +93,10 @@ public class SettlementAppController extends BaseWebController {
     @OperationLog(type = OperateType.SELECT, description ="可提现金额查询")
     public VaultsResponse<Long> accountBalanceUse() {
 
-        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();
@@ -98,14 +115,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) {
-        if(StringUtils.isEmpty(dto.getMerchantId())){
+        //TODO 暂时去掉三方支付
+       /* if(StringUtils.isEmpty(dto.getMerchantId())){
             String ipos = TokenContext.cureMiniUser().getIposMerchantId();
             if(StringUtils.isEmpty(ipos)){
                 return VaultsResponse.failed("账户未激活,请联系管理员");
@@ -118,12 +136,37 @@ 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);
+        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("可提现金额变动,请刷新");
+        }
+
+        GroupLeaderParams groupLeaderParams = new GroupLeaderParams();
+        groupLeaderParams.setOperatorId(TokenContext.cureOperatorId());
+        groupLeaderParams.setGroupLeaderId(Integer.parseInt(TokenContext.cureMiniUser().getGroupLeaderId().toString()));
+        VaultsResponse<GroupLeaderDTO>  vaultsResponse = customerFeignClient.getGroupLeaderById(groupLeaderParams);
+        GroupLeaderDTO groupLeaderDTO = vaultsResponse.getData();
+        SplitWithdraw splitWithdraw = new SplitWithdraw();
+        splitWithdraw.setOperatorId(TokenContext.cureOperatorId());
+        splitWithdraw.setWithdrawId(CgpTool.generateKey());
+        splitWithdraw.setWithdrawSeq(CgpTool.generateKey().toString());
+        splitWithdraw.setMerchantId("TZ"+TokenContext.cureMiniUser().getGroupLeaderId());
+        splitWithdraw.setAmount(dto.getAmount());
+        splitWithdraw.setTransDate(new Date());
+        splitWithdraw.setTransStatus("p");
+        splitWithdraw.setAcctStatus("p");
+        splitWithdraw.setName(groupLeaderDTO.getName());
+        splitWithdraw.setOpenid(TokenContext.cureMiniUser().getOpenId());
+        splitWithdrawService.save(splitWithdraw);
+        splitWithdrawService.updateOrderGroupLeaderWithdraw(TokenContext.cureOperatorId(), TokenContext.cureMiniUser().getGroupLeaderId(),splitWithdraw.getId());
+        return VaultsResponse.success();
     }
 
 
@@ -141,13 +184,16 @@ public class SettlementAppController extends BaseWebController {
     @PostMapping("/list")
     @ApiOperation(value = "取现记录",notes = "list")
     public VaultsResponse<CommonPage<SplitWithdraw>> list(@RequestBody SplitWithdrawDto dto){
-        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());
         return VaultsResponse.success(splitWithdrawService.pageList(dto));
     }
 }

+ 59 - 28
src/main/java/com/poteviohealth/ym/ipos/controller/feign/IposFeignController.java

@@ -20,7 +20,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.StringUtils;
 import org.apache.commons.lang3.time.DateFormatUtils;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -113,14 +112,17 @@ public class IposFeignController extends BaseFeignController {
          * 平台运营商分账 = 可分账 - 区域运营商分账 -团长分账 -站长分账
          */
         log.info(JSON.toJSONString(list));
-        BigDecimal proportion = new BigDecimal(0.01);
+
         List<SplitPay> returnList = Lists.newArrayList();
         for (SplitInfo splitInfo : list) {
+            BigDecimal proportion = BigDecimal.ONE.subtract(splitInfo.getOperatorSplitProportion());
             //List<SplitRecords> splitRecordsList = Lists.newArrayList();
-           PaymentRecords pr = paymentRecordsService.getPaymentRecords(splitInfo.getPayId());
+            //TODO 暂时去掉三方支付
+            //YJ:一级供应商;FS:二级供应商,服务商;QY:供应商,区域运营商;TZ:团长;ZZ:站长;PT:平台
+          /* PaymentRecords pr = paymentRecordsService.getPaymentRecords(splitInfo.getPayId());
            if(pr == null){
                continue;
-           }
+           }*/
             List<SplitRecordsDetail> details = Lists.newArrayList();
             SplitRecords records = new SplitRecords();
             records.setOperatorId(splitInfo.getOperatorId());
@@ -129,7 +131,7 @@ public class IposFeignController extends BaseFeignController {
             records.setPaySn(splitInfo.getPaySn());
             records.setSumPrice(splitInfo.getSumPrice());
             //手续费
-            BigDecimal chargeAmount = new BigDecimal(pr.getChargeAmount());
+            BigDecimal chargeAmount = new BigDecimal(splitInfo.getCommissionMoney());
             BigDecimal ptAmount = BigDecimal.ZERO;
             BigDecimal tzAmount = BigDecimal.ZERO;
             BigDecimal stationAmount = BigDecimal.ZERO;
@@ -162,13 +164,17 @@ public class IposFeignController extends BaseFeignController {
                  * 2.供应价/结算价 的分账(包含区域运营商/一级供应商/二级供应商/服务站)
                  */
                 //一级供应商
-                if(StringUtils.isNotEmpty(detail.getSupplierOneMerchantId()) && detail.getBelong().equals(1)){
+                //TODO 暂时去掉三方支付
+                if(detail.getBelong().equals(1)){
+                //if(StringUtils.isNotEmpty(detail.getSupplierOneMerchantId()) && detail.getBelong().equals(1)){
                     SplitRecordsDetail supplierOne = new SplitRecordsDetail();
                     supplierOne.setSplitId(records.getSplitId());
                     supplierOne.setSourceId(3);
-                    supplierOne.setMerchantId(detail.getSupplierOneMerchantId());
+                    //TODO 暂时去掉三方支付
+                    //supplierOne.setMerchantId(detail.getSupplierOneMerchantId());
+                    supplierOne.setMerchantId("YJ"+detail.getSupplierOneId().toString());
                     for (SplitRecordsDetail splitRecordsDetail : details) {
-                        if(splitRecordsDetail.getMerchantId().equals(detail.getSupplierOneMerchantId())){
+                        if(splitRecordsDetail.getMerchantId().equals(supplierOne.getMerchantId())){
                             supplierOne = splitRecordsDetail;
                             break;
                         }
@@ -179,15 +185,20 @@ public class IposFeignController extends BaseFeignController {
                         supplierOne.setDivAmt(supplierOneAmount.toString());
                         details.add(supplierOne);
                     }
-                }else if(StringUtils.isNotEmpty(detail.getServiceStationMerchantId()) && detail.getBelong().equals(2)){
+                    //TODO 暂时去掉三方支付
+                }else if(detail.getBelong().equals(2)){
+               // }else if(StringUtils.isNotEmpty(detail.getServiceStationMerchantId()) && detail.getBelong().equals(2)){
                     //二级供应商
                     SplitRecordsDetail supplierTwo = new SplitRecordsDetail();
                     supplierTwo.setSplitId(records.getSplitId());
                     supplierTwo.setSourceId(4);
-                    supplierTwo.setMerchantId(detail.getServiceStationMerchantId());
+                    //TODO 暂时去掉三方支付
+                    supplierTwo.setMerchantId("FS"+detail.getServiceStationId().toString());
+                   // supplierTwo.setMerchantId(detail.getServiceStationMerchantId());
                     boolean is_have = false;
                     for (SplitRecordsDetail splitRecordsDetail : details) {
-                        if(splitRecordsDetail.getMerchantId().equals(detail.getServiceStationMerchantId())){
+
+                        if(splitRecordsDetail.getMerchantId().equals(supplierTwo.getMerchantId())){
                             supplierTwo = splitRecordsDetail;
                             is_have = true;
                             break;
@@ -205,14 +216,18 @@ public class IposFeignController extends BaseFeignController {
                     }
                 }else if(detail.getBelong().equals(0)){
                     //服务商
-                    if(StringUtils.isNotEmpty(detail.getServiceStationMerchantId()) && detail.getOrderType().equals(2) && !detail.getServiceStationId().equals(detail.getStationId())){
+                    //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())){
                         SplitRecordsDetail serviceStation = new SplitRecordsDetail();
                         serviceStation.setSplitId(records.getSplitId());
                         serviceStation.setSourceId(5);
-                        serviceStation.setMerchantId(detail.getServiceStationMerchantId());
+                        //TODO 暂时去掉三方支付
+                        serviceStation.setMerchantId("FS"+detail.getServiceStationId().toString());
+                        //serviceStation.setMerchantId(detail.getServiceStationMerchantId());
                         boolean is_have = false;
                         for (SplitRecordsDetail splitRecordsDetail : details) {
-                            if(splitRecordsDetail.getMerchantId().equals(detail.getServiceStationMerchantId())){
+                            if(splitRecordsDetail.getMerchantId().equals(serviceStation.getMerchantId())){
                                 serviceStation = splitRecordsDetail;
                                 is_have=true;
                                 break;
@@ -227,16 +242,20 @@ public class IposFeignController extends BaseFeignController {
                             }
 
                         }
-                    }else if(StringUtils.isNotEmpty(detail.getSupplierMerchantId())){
+                        //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);
-                            supplier.setMerchantId(detail.getSupplierMerchantId());
+                            //TODO 暂时去掉三方支付
+                            supplier.setMerchantId("QY"+detail.getSupplierId().toString());
+                            //supplier.setMerchantId(detail.getSupplierMerchantId());
                             for (SplitRecordsDetail splitRecordsDetail : details) {
-                                if(splitRecordsDetail.getMerchantId().equals(detail.getSupplierMerchantId())){
+                                if(splitRecordsDetail.getMerchantId().equals(supplier.getMerchantId())){
                                     supplier = splitRecordsDetail;
                                     is_have =true;
                                     break;
@@ -262,10 +281,12 @@ public class IposFeignController extends BaseFeignController {
                         SplitRecordsDetail supplier = new SplitRecordsDetail();
                         supplier.setSplitId(records.getSplitId());
                         supplier.setSourceId(2);
-                        supplier.setMerchantId(detail.getSupplierMerchantId());
+                        //TODO 暂时去掉三方支付
+                        supplier.setMerchantId("QY"+detail.getSupplierId().toString());
+                        //supplier.setMerchantId(detail.getSupplierMerchantId());
                         boolean is_have = false;
                         for (SplitRecordsDetail splitRecordsDetail : details) {
-                            if(splitRecordsDetail.getMerchantId().equals(detail.getSupplierMerchantId())){
+                            if(splitRecordsDetail.getMerchantId().equals(supplier.getMerchantId())){
                                 supplier = splitRecordsDetail;
                                 is_have =true;
                                 break;
@@ -282,14 +303,18 @@ public class IposFeignController extends BaseFeignController {
                     }
 
                     //团长
-                    if(detail.getGroupCommissionMoney() != null && detail.getGroupCommissionMoney()>0L &&StringUtils.isNotBlank(detail.getGroupLeaderMerchantId())){
+                //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);
-                        tz.setMerchantId(detail.getGroupLeaderMerchantId());
+                        //TODO 暂时去掉三方支付
+                        tz.setMerchantId("TZ"+detail.getGroupLeaderId().toString());
+                       // tz.setMerchantId(detail.getGroupLeaderMerchantId());
                         boolean is_have = false;
                         for (SplitRecordsDetail splitRecordsDetail : details) {
-                            if(splitRecordsDetail.getMerchantId().equals(detail.getGroupLeaderMerchantId())){
+                            if(splitRecordsDetail.getMerchantId().equals(tz.getMerchantId())){
                                 tz = splitRecordsDetail;
                                 is_have =true;
                                 break;
@@ -305,14 +330,18 @@ public class IposFeignController extends BaseFeignController {
                         }
                     }
                     //站长
-                    if(detail.getStationmasterCommissionMoney() != null && detail.getStationmasterCommissionMoney()>0L&&StringUtils.isNotBlank(detail.getStationmasterMerchantId())){
+                //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);
-                        station.setMerchantId(detail.getStationmasterMerchantId());
+                        //TODO 暂时去掉三方支付
+                        station.setMerchantId("ZZ"+detail.getStationId().toString());
+                        //station.setMerchantId(detail.getStationmasterMerchantId());
                         Boolean is_have = false;
                         for (SplitRecordsDetail splitRecordsDetail : details) {
-                            if(splitRecordsDetail.getMerchantId().equals(detail.getStationmasterMerchantId())){
+                            if(splitRecordsDetail.getMerchantId().equals(station.getMerchantId())){
                                 station = splitRecordsDetail;
                                 is_have =true;
                                 break;
@@ -339,13 +368,15 @@ public class IposFeignController extends BaseFeignController {
             SplitRecordsDetail ptyys = new SplitRecordsDetail();
             ptyys.setSplitId(records.getSplitId());
             ptyys.setSourceId(1);
-            ptyys.setMerchantId(splitInfo.getOperatorMerchantId());
+            //TODO 暂时去掉三方支付
+            ptyys.setMerchantId("PT"+splitInfo.getOperatorId().toString());
             ptyys.setDivAmt(ptyysAmount.toString());
             details.add(ptyys);
-            VaultsResponse vaultsResponse = splitService.delayConfirm(records,details);
+            //TODO 暂时去掉三方支付
+           /* VaultsResponse vaultsResponse = splitService.delayConfirm(records,details);
             if(!vaultsResponse.validate()){
                 records.setComment(vaultsResponse.getMessage());
-            }
+            }*/
             records.setStatus(2);
             splitRecordsService.save(records);
             splitRecordsDetailService.saveBatch(details);

+ 17 - 0
src/main/java/com/poteviohealth/ym/ipos/mapper/SplitWithdrawMapper.java

@@ -1,7 +1,9 @@
 package com.poteviohealth.ym.ipos.mapper;
 
+import com.baomidou.mybatisplus.annotation.SqlParser;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.poteviohealth.ym.ipos.model.split.SplitWithdraw;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 分账提现记录
@@ -9,4 +11,19 @@ import com.poteviohealth.ym.ipos.model.split.SplitWithdraw;
  */
 public interface SplitWithdrawMapper extends BaseMapper<SplitWithdraw> {
 
+
+    @SqlParser(filter = true)
+    Long getGroupLeaderWithdrawPrice(@Param("operatorId")Integer operatorId,@Param("dbName")String dbName,@Param("groupLeaderId")Long groupLeaderId);
+
+    @SqlParser(filter = true)
+    Integer getGroupLeaderWithdrawSumPrice(@Param("operatorId")Integer operatorId,@Param("dbName")String dbName,@Param("groupLeaderId")Long groupLeaderId);
+
+    @SqlParser(filter = true)
+    void updateOrderGroupLeaderWithdraw(@Param("operatorId")Integer operatorId,@Param("dbName")String dbName,@Param("groupLeaderId")Long groupLeaderId,@Param("withdrawId")Integer withdrawId);
+
+    @SqlParser(filter = true)
+    void updateWithdrawSuccess(@Param("operatorId")Integer operatorId,@Param("dbName")String dbName,@Param("withdrawId")Integer withdrawId);
+
+    @SqlParser(filter = true)
+    void updateWithdrawFail(@Param("operatorId")Integer operatorId,@Param("dbName")String dbName,@Param("withdrawId")Integer withdrawId);
 }

+ 6 - 0
src/main/java/com/poteviohealth/ym/ipos/model/split/SplitWithdraw.java

@@ -48,4 +48,10 @@ public class SplitWithdraw extends BaseEntity {
 
     @ApiModelProperty(value = "失败原因")
     private String errorMsg;
+
+    @ApiModelProperty(value = "申请人")
+    private String name;
+
+    @ApiModelProperty(value = "用户openid")
+    private String openid;
 }

+ 13 - 1
src/main/java/com/poteviohealth/ym/ipos/service/ISplitWithdrawService.java

@@ -11,7 +11,6 @@ import com.poteviohealth.ym.ipos.model.split.dto.SplitWithdrawDto;
  */
 public interface ISplitWithdrawService extends IService<SplitWithdraw>{
 
-
     /**
      * 取现列表
      * @param dto
@@ -19,4 +18,17 @@ public interface ISplitWithdrawService extends IService<SplitWithdraw>{
      */
     CommonPage<SplitWithdraw> pageList(SplitWithdrawDto dto);
 
+    Long getGroupLeaderWithdrawPrice(Integer operatorId,Long groupLeaderId);
+
+    Integer getGroupLeaderWithdrawSumPrice(Integer operatorId,Long groupLeaderId);
+
+    void updateOrderGroupLeaderWithdraw(Integer operatorId,Long groupLeaderId,Integer withdrawId);
+
+    void withdrawSuccess(Integer operatorId,Integer withdrawId);
+
+    void successSend(SplitWithdraw splitWithdraw);
+
+    void withdrawFail(Integer operatorId,Integer withdrawId);
+
+    void failSend(SplitWithdraw splitWithdraw);
 }

+ 130 - 2
src/main/java/com/poteviohealth/ym/ipos/service/impl/SplitWithdrawServiceImpl.java

@@ -1,17 +1,34 @@
 package com.poteviohealth.ym.ipos.service.impl;
 
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
+import com.poteviohealth.cgp.common.filter.TokenContext;
+import com.poteviohealth.cgp.common.integrated.EntityIdParams;
+import com.poteviohealth.cgp.common.integrated.partner.PartnerFeignClient;
+import com.poteviohealth.cgp.common.integrated.partner.model.OperatorDTO;
 import com.poteviohealth.cgp.common.model.CommonPage;
+import com.poteviohealth.cgp.common.model.VaultsResponse;
 import com.poteviohealth.cgp.common.utils.MyBatisConvertUtils;
 import com.poteviohealth.ym.ipos.mapper.SplitWithdrawMapper;
 import com.poteviohealth.ym.ipos.model.split.SplitWithdraw;
 import com.poteviohealth.ym.ipos.model.split.dto.SplitWithdrawDto;
 import com.poteviohealth.ym.ipos.service.ISplitWithdrawService;
+import com.poteviohealth.ym.ipos.utils.WechatServiceApi;
+import me.chanjar.weixin.common.error.WxErrorException;
 import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
 /**
  * 分账提现记录
  * @author Qin
@@ -19,19 +36,130 @@ import org.springframework.stereotype.Service;
 @Service
 public class SplitWithdrawServiceImpl extends ServiceImpl<SplitWithdrawMapper, SplitWithdraw> implements ISplitWithdrawService {
 
-
+    @Value("${sync.dbName}")
+    private String dbName;
+    @Resource
+    private PartnerFeignClient partnerFeignClient;
     @Override
     public CommonPage<SplitWithdraw> pageList(SplitWithdrawDto dto) {
         Page<SplitWithdraw> page = MyBatisConvertUtils.convert2Page(dto);
         QueryWrapper<SplitWithdraw> wrapper = new QueryWrapper<>();
-        wrapper.eq("merchant_id", dto.getIposMerchantId());
+        wrapper.eq("operator_id", TokenContext.cureOperatorId());
+        wrapper.eq(StringUtils.isNotEmpty(dto.getIposMerchantId()),"merchant_id", dto.getIposMerchantId());
         wrapper.eq(StringUtils.isNotEmpty(dto.getTransStatus()),"trans_status", dto.getTransStatus());
         wrapper.eq(StringUtils.isNotEmpty(dto.getAcctStatus()),"acct_status", dto.getAcctStatus());
         wrapper.ge(StringUtils.isNotEmpty(dto.getTransDateStart()), "trans_date",dto.getTransDateStart());
         wrapper.le(StringUtils.isNotEmpty(dto.getTransDateEnd()), "trans_date",dto.getTransDateEnd());
+        wrapper.orderByDesc("trans_date");
         Page<SplitWithdraw> result = this.page(page,wrapper);
         CommonPage<SplitWithdraw> ret = MyBatisConvertUtils.convert2CommonPage(result);
         ret.setRecords(result.getRecords());
         return ret;
     }
+
+    @Override
+    public Long getGroupLeaderWithdrawPrice(Integer operatorId, Long groupLeaderId) {
+
+        return baseMapper.getGroupLeaderWithdrawPrice(operatorId,dbName,groupLeaderId);
+    }
+
+    @Override
+    public Integer getGroupLeaderWithdrawSumPrice(Integer operatorId,  Long groupLeaderId) {
+        return baseMapper.getGroupLeaderWithdrawSumPrice(operatorId,dbName,groupLeaderId);
+    }
+
+    @Override
+    public void updateOrderGroupLeaderWithdraw(Integer operatorId, Long groupLeaderId, Integer withdrawId) {
+        baseMapper.updateOrderGroupLeaderWithdraw(operatorId,dbName,groupLeaderId,withdrawId);
+    }
+
+    @Override
+    public void withdrawSuccess(Integer operatorId, Integer withdrawId) {
+        baseMapper.updateWithdrawSuccess(operatorId,dbName,withdrawId);
+    }
+
+    @Override
+    public void successSend(SplitWithdraw splitWithdraw) {
+        try {
+            WxMaService service = this.getWechatService(splitWithdraw.getOperatorId());
+
+            WxMaSubscribeMessage message = new WxMaSubscribeMessage();
+            //接收者(用户)的 openid.
+            message.setToUser(splitWithdraw.getOpenid());
+            //所需下发的模板消息的id
+            message.setTemplateId("FVqI5DhBzQiCm5TAssmhASRFe9YKioW_MFllqQQ_m_k");
+            List<WxMaSubscribeMessage.MsgData> dataList = Lists.newArrayList();
+            WxMaSubscribeMessage.MsgData data = new WxMaSubscribeMessage.MsgData();
+            data.setName("amount1");
+            data.setValue(new BigDecimal(splitWithdraw.getAmount()).divide(new BigDecimal(100),2,BigDecimal.ROUND_HALF_UP).toString()+"元");
+            dataList.add(data);
+            WxMaSubscribeMessage.MsgData data1 = new WxMaSubscribeMessage.MsgData();
+            data1.setName("phrase2");
+            data1.setValue("已通过");
+            dataList.add(data1);
+            WxMaSubscribeMessage.MsgData data2 = new WxMaSubscribeMessage.MsgData();
+            data2.setName("thing3");
+            data2.setValue(splitWithdraw.getErrorMsg());
+            WxMaSubscribeMessage.MsgData data3 = new WxMaSubscribeMessage.MsgData();
+            data3.setName("time4");
+            data3.setValue(DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
+            dataList.add(data3);
+            //模板内容,不填则下发空模板.
+            message.setData(dataList);
+            service.getSubscribeService().sendSubscribeMsg(message);
+        } catch (WxErrorException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void withdrawFail(Integer operatorId, Integer withdrawId) {
+        baseMapper.updateWithdrawFail(operatorId,dbName,withdrawId);
+    }
+
+    @Override
+    public void failSend(SplitWithdraw splitWithdraw) {
+        try {
+            WxMaService service = this.getWechatService(splitWithdraw.getOperatorId());
+            WxMaSubscribeMessage message = new WxMaSubscribeMessage();
+            //接收者(用户)的 openid.
+            message.setToUser(splitWithdraw.getOpenid());
+            //所需下发的模板消息的id
+            message.setTemplateId("FVqI5DhBzQiCm5TAssmhASRFe9YKioW_MFllqQQ_m_k");
+            List<WxMaSubscribeMessage.MsgData> dataList = Lists.newArrayList();
+            WxMaSubscribeMessage.MsgData data = new WxMaSubscribeMessage.MsgData();
+            data.setName("amount1");
+            data.setValue(new BigDecimal(splitWithdraw.getAmount()).divide(new BigDecimal(100),2,BigDecimal.ROUND_HALF_UP).toString()+"元");
+            dataList.add(data);
+            WxMaSubscribeMessage.MsgData data1 = new WxMaSubscribeMessage.MsgData();
+            data1.setName("phrase2");
+            data1.setValue("已驳回");
+            dataList.add(data1);
+            WxMaSubscribeMessage.MsgData data2 = new WxMaSubscribeMessage.MsgData();
+            data2.setName("thing3");
+            data2.setValue(splitWithdraw.getErrorMsg());
+            dataList.add(data2);
+            WxMaSubscribeMessage.MsgData data3 = new WxMaSubscribeMessage.MsgData();
+            data3.setName("time4");
+            data3.setValue(DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
+            dataList.add(data3);
+            //模板内容,不填则下发空模板.
+            message.setData(dataList);
+            service.getSubscribeService().sendSubscribeMsg(message);
+        } catch (WxErrorException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private WxMaService getWechatService (Integer operationId){
+        WxMaService service = WechatServiceApi.getInstance(operationId);
+        if (service == null){
+            EntityIdParams entityIdParams = new EntityIdParams();
+            entityIdParams.setId(operationId);
+            VaultsResponse<OperatorDTO> vaultsResponse =  partnerFeignClient.getOperator(entityIdParams);
+            OperatorDTO dto = vaultsResponse.getData();
+            service = WechatServiceApi.initInstance(dto.getId(), dto.getAppId(), dto.getAppSecret());
+        }
+        return service;
+    }
 }

+ 47 - 0
src/main/java/com/poteviohealth/ym/ipos/utils/WechatServiceApi.java

@@ -0,0 +1,47 @@
+package com.poteviohealth.ym.ipos.utils;
+
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
+import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 微信 token接口
+ *
+ * @author cxw
+ */
+@Slf4j
+public class WechatServiceApi {
+    private static Map<Integer, WxMaService> map = new HashMap<>();
+    private WechatServiceApi() {
+    }
+
+    /**
+     * 获取实例
+     *
+     * @param operatorId operatorId
+     * @return 实例
+     */
+    public static synchronized WxMaService getInstance(Integer operatorId) {
+        return map.get(operatorId);
+    }
+
+    public static synchronized WxMaService initInstance(Integer operatorId, String appid, String secret) {
+        WxMaService wxMaService = map.get(operatorId);
+        if (wxMaService != null) {
+            return wxMaService;
+        }
+        WxMaDefaultConfigImpl wxMaConfig = new WxMaDefaultConfigImpl();
+        wxMaConfig.setAppid(appid);
+        wxMaConfig.setSecret(secret);
+        wxMaService = new WxMaServiceImpl();
+        //设置配置文件
+        wxMaService.setWxMaConfig(wxMaConfig);
+
+        map.put(operatorId, wxMaService);
+        return wxMaService;
+    }
+}

+ 4 - 1
src/main/resources/develop/application.yml

@@ -45,4 +45,7 @@ logging:
 
 ribbon:
  ReadTimeout: 5000
- ConnectTimeout: 5000
+ ConnectTimeout: 5000
+
+sync:
+  dbName: rz

+ 52 - 0
src/main/resources/mapper/ipos/SplitWithdrawMapper.xml

@@ -1,4 +1,56 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.poteviohealth.ym.ipos.mapper.SplitWithdrawMapper">
+    <update id="updateOrderGroupLeaderWithdraw">
+        update ${dbName}_order.o_order_detail_${operatorId} od,
+            ${dbName}_order.o_order_${operatorId} o
+        set od.with_draw_id = #{withdrawId}
+        where o.order_id=od.order_id
+          and od.with_draw_id =0
+          and od.split_status = 2
+          and o.group_leader_id=#{groupLeaderId}
+    </update>
+    <update id="updateWithdrawSuccess">
+        update ${dbName}_order.o_order_detail_${operatorId} od,
+            ${dbName}_order.o_order_${operatorId} o
+        set od.split_status = 3
+        where o.order_id=od.order_id
+          and od.with_draw_id = #{withdrawId}
+    </update>
+    <update id="updateWithdrawFail">
+        update ${dbName}_order.o_order_detail_${operatorId} od,
+            ${dbName}_order.o_order_${operatorId} o
+        set od.with_draw_id = 0
+        where o.order_id=od.order_id
+          and od.with_draw_id = #{withdrawId}
+    </update>
+
+    <select id="getGroupLeaderWithdrawPrice" resultType="java.lang.Long">
+        SELECT
+            IFNULL(sum(od.group_commission_money),0)
+        FROM
+            ${dbName}_order.o_order_detail_${operatorId} od,
+            ${dbName}_order.o_order_${operatorId} o
+        WHERE
+            o.order_id = od.order_id
+          AND od.split_status = 2
+          AND od.pay_status = 3
+          AND o.order_status = 6
+          and od.with_draw_id = 0
+          AND o.group_leader_id =#{groupLeaderId}
+    </select>
+
+    <select id="getGroupLeaderWithdrawSumPrice" resultType="java.lang.Integer">
+        SELECT
+            IFNULL(sum(od.group_commission_money),0)
+        FROM
+            ${dbName}_order.o_order_detail_${operatorId} od,
+            ${dbName}_order.o_order_${operatorId} o
+        WHERE
+            o.order_id = od.order_id
+          AND od.split_status >0
+          AND od.pay_status = 3
+          AND o.order_status = 6
+          AND o.group_leader_id =#{groupLeaderId}
+    </select>
 </mapper>

+ 4 - 1
src/main/resources/production/application.yml

@@ -45,4 +45,7 @@ logging:
 
 ribbon:
   ReadTimeout: 5000
-  ConnectTimeout: 5000
+  ConnectTimeout: 5000
+
+sync:
+  dbName: rz

+ 4 - 1
src/main/resources/uat/application.yml

@@ -75,4 +75,7 @@ pay:
 
 ribbon:
   ReadTimeout: 50000
-  ConnectTimeout: 50000
+  ConnectTimeout: 50000
+
+sync:
+  dbName: rz

+ 4 - 1
src/main/resources/zky/application.yml

@@ -75,4 +75,7 @@ pay:
 
 ribbon:
   ReadTimeout: 50000
-  ConnectTimeout: 50000
+  ConnectTimeout: 50000
+
+sync:
+  dbName: rz