diff --git a/pluss-service-bundle/src/main/java/cn/pluss/platform/realFans/impl/RealFansServiceImpl.java b/pluss-service-bundle/src/main/java/cn/pluss/platform/realFans/impl/RealFansServiceImpl.java index cb13574..8bc61a2 100644 --- a/pluss-service-bundle/src/main/java/cn/pluss/platform/realFans/impl/RealFansServiceImpl.java +++ b/pluss-service-bundle/src/main/java/cn/pluss/platform/realFans/impl/RealFansServiceImpl.java @@ -9,6 +9,7 @@ import cn.pluss.platform.merchantProfit.MerchantProfitService; import cn.pluss.platform.notice.NoticeService; import cn.pluss.platform.realFans.RealFansService; import cn.pluss.platform.user.impl.GeneralPushUtil; +import cn.pluss.platform.userAccount.impl.UserAccountServiceImpl; import cn.pluss.platform.userApp.UserAppService; import cn.pluss.platform.userIntegral.UserIntegralService; import cn.pluss.platform.util.*; @@ -44,6 +45,9 @@ public class RealFansServiceImpl extends ServiceImpl i @Autowired private GeneralPushUtil generalPushUtil; + @Autowired + UserAccountServiceImpl userAccountService; + @Override public void removeProfit(MerchantOrder order) { if(ObjectUtil.isEmpty(order)){ @@ -59,6 +63,8 @@ public class RealFansServiceImpl extends ServiceImpl i private void cancelUserProfitV2(MerchantOrder order) { Vector profitList = new Vector(); + Vector userAccounts=new Vector<>(); + Vector accountFlows=new Vector<>(); UserPromotion userPromotion= userPromotionMapper.selectByUserId(order.getUserId().toString()); if(ObjectUtil.isEmpty(userPromotion)){ @@ -71,7 +77,7 @@ public class RealFansServiceImpl extends ServiceImpl i return; } - createUserV3Profit(order,userPromotion.getParentUserId(),profitList,order.getRate().divide(BigDecimal.valueOf(100))); + createUserV3Profit(order,userPromotion.getParentUserId(),profitList,userAccounts,accountFlows,order.getRate().divide(BigDecimal.valueOf(100))); if (!profitList.isEmpty()) { log.info("【去除分润计算完成】开始批量插入分润数据,生成分润的订单编号:{},分润条数:{}", order.getOrderNumber(), profitList.size()); @@ -95,46 +101,68 @@ public class RealFansServiceImpl extends ServiceImpl i @Autowired UserPromotionMapper userPromotionMapper; - private void createUserV3Profit(MerchantOrder order,String userId,Vector profits,BigDecimal nowRate){ + private void createUserV3Profit(MerchantOrder order,String userId,Vector profits,Vector userAccounts,Vector flows,BigDecimal nowRate){ UserPromotion userPromotion= userPromotionMapper.selectByUserId(userId); if(ObjectUtil.isEmpty(userPromotion)){ log.error("订单号:{},分润结束,获取分润数为:{}",order.getOrderNumber(),profits.size()); return; } -// if("0".equals(userPromotion.getParentUserId())){ -// log.error("订单号:{} 父级为:{},父级类型:{},分润结束,获取分润数为:{},",order.getOrderNumber(),userPromotion.getParentUserId(),userPromotion.getTypeCode(),profits.size()); -// return; -// } + if(ObjectUtil.isEmpty(order.getRefundAmt())||N.egt(BigDecimal.ZERO,order.getRefundAmt())){ + log.error("退款金额为0 :{},{}",order.getOrderNumber(),order.getRefundAmt()); + return; + } + if("MC".equals(userPromotion.getTypeCode())){ - createUserV3Profit(order,userPromotion.getParentUserId(),profits,new BigDecimal(userPromotion.getCurrentFee())); -// if("1".equals(userPromotion.getIsExtend())||"2".equals(userPromotion.getIsExtend())){ -// BigDecimal profitRate = BigDecimal.ZERO; -// -// if (nowRate.compareTo(new BigDecimal(userPromotion.getCurrentFee())) >= 0) { -// profitRate = nowRate.subtract(new BigDecimal(userPromotion.getCurrentFee())); -// nowRate = new BigDecimal(userPromotion.getCurrentFee()); -// }else { -// return; -// } -// -// UserApp nowUserApp = userAppMapper.selectByUserId(userId); -// if(ObjectUtil.isEmpty(nowUserApp)){ -// log.error("订单号:{},分润结束,获取分润数为:{}",order.getOrderNumber(),profits.size()); -// return; -// } -// -// log.info("userId:{},rate:{},amount:{}",nowUserApp.getUserId(),profitRate,order.getConsumeFee()); -// BigDecimal profitAmt = profitRate.divide(BigDecimal.valueOf(100)).multiply(BigDecimal.valueOf(order.getConsumeFee())).setScale(4, BigDecimal.ROUND_DOWN); -// MerchantProfit profit = new MerchantProfit(nowUserApp, nowUserApp, order, profitAmt, profitRate, "5", "1"); -// profits.add(profit); -//// sendProfitMessage(nowUserApp, profitAmt, order.getOrderNumber()); -// createUserV3Profit(order,userPromotion.getParentUserId(),profits,new BigDecimal(userPromotion.getCurrentFee())); -// -// }else { -// createUserV3Profit(order,userPromotion.getParentUserId(),profits,new BigDecimal(userPromotion.getCurrentFee())); -// } + if("1".equals(userPromotion.getIsExtend())){ + userPromotion= getUserPromotion(Long.valueOf(userPromotion.getParentUserId())); + + BigDecimal profitRate = BigDecimal.ZERO; + + if (nowRate.compareTo(new BigDecimal(userPromotion.getCurrentFee())) >= 0) { + profitRate = nowRate.subtract(new BigDecimal(userPromotion.getCurrentFee())); + nowRate = new BigDecimal(userPromotion.getCurrentFee()); + }else { + return; + } + + UserApp nowUserApp = userAppMapper.selectByUserId(userPromotion.getUserId()); + if(ObjectUtil.isEmpty(nowUserApp)){ + log.error("订单号:{},分润结束,获取分润数为:{}",order.getOrderNumber(),profits.size()); + return; + } + + log.info("userId:{},rate:{},amount:{}",nowUserApp.getUserId(),profitRate,order.getConsumeFee()); + + + + BigDecimal profitAmt = profitRate.divide(BigDecimal.valueOf(100)).multiply(order.getRefundAmt()).setScale(4, BigDecimal.ROUND_DOWN); + + + UserAccount userAccount= userAccountService.initUserAccount(nowUserApp.getUserId().intValue()); + userAccount.setBalance(userAccount.getBalance().subtract(profitAmt)); + userAccount.setUpdateTime(new Date()); + UserAccountFlow flow=new UserAccountFlow(); + + flow.setUserId(nowUserApp.getUserId().intValue()); + flow.setBizCode("103"); + flow.setBizName("退款扣除收益"); + flow.setAmount(profitAmt); + flow.setBalance(userAccount.getBalance()); + flow.setCreateTime(new Date()); + userAccounts.add(userAccount); + flows.add(flow); + + + MerchantProfit profit = new MerchantProfit(nowUserApp, nowUserApp, order, profitAmt.negate(), profitRate, "5", "1"); + profits.add(profit); +// sendProfitMessage(nowUserApp, profitAmt, order.getOrderNumber()); + createUserV3Profit(order,userPromotion.getParentUserId(),profits,userAccounts,flows,new BigDecimal(userPromotion.getCurrentFee())); + + }else { + createUserV3Profit(order,userPromotion.getParentUserId(),profits,userAccounts,flows,new BigDecimal(userPromotion.getCurrentFee())); + } }else { BigDecimal profitRate = BigDecimal.ZERO; @@ -154,16 +182,45 @@ public class RealFansServiceImpl extends ServiceImpl i } log.info("userId:{},rate:{},amount:{}",nowUserApp.getUserId(),profitRate,order.getConsumeFee()); BigDecimal profitAmt = profitRate.divide(BigDecimal.valueOf(100)).multiply(order.getRefundAmt()).setScale(4, BigDecimal.ROUND_DOWN); + + + UserAccount userAccount= userAccountService.initUserAccount(nowUserApp.getUserId().intValue()); + userAccount.setBalance(userAccount.getBalance().subtract(profitAmt)); + userAccount.setUpdateTime(new Date()); + UserAccountFlow flow=new UserAccountFlow(); + + flow.setUserId(nowUserApp.getUserId().intValue()); + flow.setBizCode("103"); + flow.setBizName("退款扣除收益"); + flow.setAmount(profitAmt); + flow.setBalance(userAccount.getBalance()); + flow.setCreateTime(new Date()); + userAccounts.add(userAccount); + flows.add(flow); + + MerchantProfit profit = new MerchantProfit(nowUserApp,nowUserApp , order, profitAmt.abs().negate(), profitRate, "5", "1"); profits.add(profit); // sendProfitMessage(nowUserApp, profitAmt, order.getOrderNumber()); - createUserV3Profit(order,userPromotion.getParentUserId(),profits,new BigDecimal(userPromotion.getCurrentFee())); + createUserV3Profit(order,userPromotion.getParentUserId(),profits,userAccounts,flows,order.getRefundAmt()); } } + private UserPromotion getUserPromotion(Long userId){ + + UserPromotion userPromotion= userPromotionMapper.selectByPrimaryKey(userId); + if(ObjectUtil.isNotEmpty(userPromotion)&&"MC".equals(userPromotion.getTypeCode())){ + getUserPromotion(Long.valueOf(userPromotion.getParentUserId())); + } + return userPromotion; + + + } + + @Override public void removeProfit(MerchantOrder order, BigDecimal refundAmt,BigDecimal useRefundAmt) { BigDecimal consumeFee = BigDecimal.valueOf(order.getConsumeFee()); diff --git a/pluss-service-bundle/src/main/java/cn/pluss/platform/sxf/pay/impl/SxfPayServiceImpl.java b/pluss-service-bundle/src/main/java/cn/pluss/platform/sxf/pay/impl/SxfPayServiceImpl.java index 159a75d..b4dbb12 100644 --- a/pluss-service-bundle/src/main/java/cn/pluss/platform/sxf/pay/impl/SxfPayServiceImpl.java +++ b/pluss-service-bundle/src/main/java/cn/pluss/platform/sxf/pay/impl/SxfPayServiceImpl.java @@ -472,7 +472,7 @@ public class SxfPayServiceImpl implements SxfPayService { e.printStackTrace(); } if (!flag) { - log.error("==============>【随行付】退款订单查询签名校验失败:{}<=================="); + log.error("==============>【随行付】bb:{}<=================="); result.put("code", ResultCode.FAIL.code()); result.put("msg", "签名校验失败"); return result;