Просмотр исходного кода

//sharing rate

release_toaliyun_real
xhxu 3 лет назад
Родитель
Сommit
57aad21c0e
21 измененных файлов: 448 добавлений и 132 удалений
  1. +2
    -0
      mallinkAdmin/src/main/resources/db/migration/V2023022300001__add_goodsC_permission.sql
  2. +3
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxPayAccount.java
  3. +2
    -0
      mallinkService/src/main/java/com/iformall/service/TtGoodsCategoryService.java
  4. +2
    -0
      mallinkService/src/main/java/com/iformall/service/TtMallGoodsCategoryService.java
  5. +3
    -5
      mallinkService/src/main/java/com/iformall/service/WxCouponService.java
  6. +59
    -58
      mallinkService/src/main/java/com/iformall/service/impl/TtCouponGoodsServiceImpl.java
  7. +9
    -0
      mallinkService/src/main/java/com/iformall/service/impl/TtGoodsCategoryServiceImpl.java
  8. +17
    -0
      mallinkService/src/main/java/com/iformall/service/impl/TtMallGoodsCategoryServiceImpl.java
  9. +5
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java
  10. +19
    -12
      mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java
  11. +8
    -8
      mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderShare.java
  12. +26
    -0
      mallinkService/src/main/java/com/iformall/service/pay/PayServiceFactory.java
  13. +61
    -0
      mallinkService/src/main/java/com/iformall/service/pay/service/fee/ServiceFeeAdapterService.java
  14. +127
    -0
      mallinkService/src/main/java/com/iformall/service/pay/service/fee/TtServiceFeeService.java
  15. +98
    -0
      mallinkService/src/main/java/com/iformall/service/pay/service/fee/WxServiceFeeService.java
  16. +0
    -8
      mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareAdapterService.java
  17. +4
    -26
      mallinkService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java
  18. +0
    -5
      mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/sft/WxPayShareSFTService.java
  19. +0
    -5
      mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v2/WxPayShareService.java
  20. +0
    -5
      mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java
  21. +3
    -0
      mallinkService/src/main/java/com/iformall/utils/PayUtils.java

+ 2
- 0
mallinkAdmin/src/main/resources/db/migration/V2023022300001__add_goodsC_permission.sql Просмотреть файл

@@ -0,0 +1,2 @@
INSERT INTO `mallink`.`mall_permission`(`id`, `name`, `parent_id`, `available`, `permission`, `resource_type`, `module_color`, `module_color_num`, `url`, `icon`, `version_type`, `sort`) VALUES (1103, '抖音类目佣金设置', 100, 'Y', NULL, 1, NULL, NULL, 'goodsCategory', 'icon-shenpiguanli', 0, 1103);


+ 3
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxPayAccount.java Просмотреть файл

@@ -72,6 +72,9 @@ public class WxPayAccount extends TenantEntity {

@io.swagger.annotations.ApiModelProperty(value="是否抽成",name="isCommission")
private Integer isCommission;
/**
* 微信适用。抖音通过类别获取
*/
@io.swagger.annotations.ApiModelProperty(value="系统提点",name="systemRate")
private Integer systemRate;
@io.swagger.annotations.ApiModelProperty(value="销售提点",name="sellRate")


+ 2
- 0
mallinkService/src/main/java/com/iformall/service/TtGoodsCategoryService.java Просмотреть файл

@@ -49,4 +49,6 @@ public interface TtGoodsCategoryService {

void updateFee(TtGoodsCategory record);

int getTtServiceFee(Integer categoryId);

}

+ 2
- 0
mallinkService/src/main/java/com/iformall/service/TtMallGoodsCategoryService.java Просмотреть файл

@@ -14,4 +14,6 @@ public interface TtMallGoodsCategoryService {

void updateFee(TtMallGoodsCategoryVo record);

int getMallSoftwareFee(TenantEntity tenantEntity,Integer categoryId);

}

+ 3
- 5
mallinkService/src/main/java/com/iformall/service/WxCouponService.java Просмотреть файл

@@ -7,11 +7,7 @@ import javax.servlet.http.HttpServletResponse;

import com.github.pagehelper.PageInfo;
import com.iformall.common.ResultData;
import com.iformall.domain.po.TtCouponChannelPoi;
import com.iformall.domain.po.WxAppinfo;
import com.iformall.domain.po.WxCoupon;
import com.iformall.domain.po.WxMall;
import com.iformall.domain.po.WxMerchant;
import com.iformall.domain.po.*;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.domain.vo.TtCouponVo;
import com.iformall.domain.vo.WxCouponCVo;
@@ -303,4 +299,6 @@ public interface WxCouponService {
* @return
*/
boolean isCouponMerchantValid(Long couponId,Integer couponType,TenantEntity couponTenantEntity);

Integer getCategoryId(TenantEntity tenantEntity, Long couponId);
}

+ 59
- 58
mallinkService/src/main/java/com/iformall/service/impl/TtCouponGoodsServiceImpl.java Просмотреть файл

@@ -19,6 +19,8 @@ import com.iformall.enums.*;
import com.iformall.exception.MallinkException;
import com.iformall.mapper.*;
import com.iformall.service.*;
import com.iformall.service.pay.PayServiceFactory;
import com.iformall.service.pay.service.fee.ServiceFeeAdapterService;
import com.iformall.utils.Constant;
import com.iformall.utils.DateUtils;
import me.chanjar.weixin.common.error.WxErrorException;
@@ -81,7 +83,7 @@ public class TtCouponGoodsServiceImpl implements TtCouponGoodsService {
TtPoiTakeRateMapper ttPoiTakeRateMapper;

@Autowired
TtGoodsCategoryMapper ttGoodsCategoryMapper;
TtGoodsCategoryService ttGoodsCategoryService;
@Lazy
@Autowired
@@ -91,6 +93,9 @@ public class TtCouponGoodsServiceImpl implements TtCouponGoodsService {
@Autowired
WxMerchantService wxMerchantService;

@Autowired
PayServiceFactory payServiceFactory;

// @Override
// public ResultData couponList(TtCouponVo ttCouponVo, Integer pageNum, Integer pageSize) {
// PageInfo<TtCouponVo> pageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> wxCouponMapper.ttCouponList(ttCouponVo));
@@ -940,13 +945,13 @@ public class TtCouponGoodsServiceImpl implements TtCouponGoodsService {
}
}

/**
* 删除定向计划里的达人,并处理达人数据
* 只能一个个删除,有可能删除失败
* @param ttWebService
* @param takeRate
* @return
*/
// /**
// * 删除定向计划里的达人,并处理达人数据
// * 只能一个个删除,有可能删除失败
// * @param ttWebService
// * @param takeRate
// * @return
// */
// private void poiOrientedPlanDeleteTalent(TtWebService ttWebService,TtPoiTakeRate takeRate){
// if(takeRate == null || takeRate.getId() == null
// || takeRate.getDouyinIdList() == null || takeRate.getDouyinIdList().isEmpty()){
@@ -1090,9 +1095,11 @@ public class TtCouponGoodsServiceImpl implements TtCouponGoodsService {

TtPoiTakeRate ttPoiTakeRate = ttPoiTakeRateMapper.selectByCoupon(tenantInfo.getTenantId(), couponId,EnumCpsPlanType.ALL.getCode());
Map<String,Object> map = new HashMap<>();
if(ttPoiTakeRate != null){
map.put("mallRate",ttPoiTakeRate.getTakeRate());
int mallRate = 0;
if(ttPoiTakeRate != null && ttPoiTakeRate.getTakeRate() != null){
mallRate = ttPoiTakeRate.getTakeRate();
}
map.put("mallRate",mallRate);

WxAppinfo couponAppInfo = wxAppinfoService.getCouponAppInfo(wxCoupon);
if(couponAppInfo == null || couponAppInfo.getPayId() == null){
@@ -1103,27 +1110,19 @@ public class TtCouponGoodsServiceImpl implements TtCouponGoodsService {
return new ResultData(ErrorCode.API_KEY_NOT_FOUND);
}

map.put("realRate",payAccount.getRealRate());
int rate = 0;
if(EnumYesOrNo.YES.getCode().equals(payAccount.getIsCommission())){
map.put("systemRate",payAccount.getSystemRate()+payAccount.getSellRate());
rate = payAccount.getRealRate()+payAccount.getSystemRate()+payAccount.getSellRate();
}else{
rate = payAccount.getRealRate();
}

if(EnumAppPlat.TOUTIAO.getCode().equals(couponAppInfo.getPlat())){
if(wxCoupon.getCategoryId() == null){
return new ResultData(ErrorCode.COUPON_ORDER_TYPE_NOT_SUPPORTED.getCode(),"卡券信息错误");
}
TtGoodsCategory ttGoodsCategory = ttGoodsCategoryMapper.selectById(wxCoupon.getCategoryId());
map.put("serviceFeeRate",ttGoodsCategory.getServiceFee()-payAccount.getRealRate());
rate = rate-payAccount.getRealRate()+ttGoodsCategory.getServiceFee();
Integer maxTakeRate = ttPoiTakeRateMapper.getMaxTakeRate(wxCoupon.getTenantId(), wxCoupon.getId());
if(maxTakeRate != null){
rate += maxTakeRate;
}
ServiceFeeAdapterService serviceFeeService = payServiceFactory.getServiceFeeAdapterService(couponAppInfo.getPlat());
int realRate = serviceFeeService.getRealRate(payAccount);
map.put("realRate",realRate);
int systemCommission = serviceFeeService.getSystemCommission(wxCoupon.getCategoryId(),payAccount);
int sellCommission = serviceFeeService.getSellCommission(payAccount);
map.put("systemRate",systemCommission + sellCommission);
int officialCommission = serviceFeeService.getOfficialCommission(wxCoupon.getCategoryId(), payAccount);
map.put("serviceFeeRate",officialCommission);
Integer maxTakeRate = ttPoiTakeRateMapper.getMaxTakeRate(wxCoupon.getTenantId(), wxCoupon.getId());
if(maxTakeRate == null){
maxTakeRate = 0;
}
int rate = realRate + systemCommission + sellCommission + officialCommission + maxTakeRate;

map.put("mallMax",getAllMax());
map.put("mallMin",rate);
@@ -1158,8 +1157,8 @@ public class TtCouponGoodsServiceImpl implements TtCouponGoodsService {
throw new MallinkException(ErrorCode.COUPON_ORDER_TYPE_NOT_SUPPORTED);
}
TtPoiTakeRate ttPoiTakeRate = ttPoiTakeRateMapper.selectByCoupon(wxCoupon.getTenantId(), wxCoupon.getId(),EnumCpsPlanType.ALL.getCode());
Integer takeRate = null;
if(ttPoiTakeRate != null){
int takeRate = 0;
if(ttPoiTakeRate != null && ttPoiTakeRate.getTakeRate() != null){
takeRate = ttPoiTakeRate.getTakeRate();
}else{
return getAllMax();
@@ -1173,20 +1172,14 @@ public class TtCouponGoodsServiceImpl implements TtCouponGoodsService {
if(payAccount == null){
throw new MallinkException(ErrorCode.API_KEY_NOT_FOUND);
}
int rate = 0;
rate = payAccount.getRealRate()+payAccount.getSystemRate()+payAccount.getSellRate();
if(EnumAppPlat.TOUTIAO.getCode().equals(couponAppInfo.getPlat())){
if(wxCoupon.getCategoryId() == null){
throw new MallinkException(ErrorCode.COUPON_ORDER_TYPE_NOT_SUPPORTED.getCode(),"卡券信息错误");
}
TtGoodsCategory ttGoodsCategory = ttGoodsCategoryMapper.selectById(wxCoupon.getCategoryId());
rate = rate-payAccount.getRealRate()+ttGoodsCategory.getServiceFee();
}

int rate = getOtherAllFee(couponAppInfo,payAccount,wxCoupon.getCategoryId());

if(takeRate > rate){
rate = takeRate - rate;
return rate;
}else{
throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"分佣率异常");
throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"分佣率设置异常");
}
}
//达人分佣率最小值
@@ -1216,23 +1209,31 @@ public class TtCouponGoodsServiceImpl implements TtCouponGoodsService {
if(payAccount == null){
throw new MallinkException(ErrorCode.API_KEY_NOT_FOUND);
}
int rate = 0;
if(EnumYesOrNo.YES.getCode().equals(payAccount.getIsCommission())){
rate = payAccount.getRealRate()+payAccount.getSystemRate()+payAccount.getSellRate();
}else{
rate = payAccount.getRealRate();
}
if(EnumAppPlat.TOUTIAO.getCode().equals(couponAppInfo.getPlat())){
if(wxCoupon.getCategoryId() == null){
throw new MallinkException(ErrorCode.COUPON_ORDER_TYPE_NOT_SUPPORTED.getCode(),"卡券信息错误");
}
TtGoodsCategory ttGoodsCategory = ttGoodsCategoryMapper.selectById(wxCoupon.getCategoryId());
rate = rate-payAccount.getRealRate()+ttGoodsCategory.getServiceFee();
Integer maxTakeRate = ttPoiTakeRateMapper.getMaxTakeRate(wxCoupon.getTenantId(), wxCoupon.getId());
if(maxTakeRate != null){
rate += maxTakeRate;
}

int rate = getOtherAllFee(couponAppInfo,payAccount,wxCoupon.getCategoryId());
Integer maxTakeRate = ttPoiTakeRateMapper.getMaxTakeRate(wxCoupon.getTenantId(), wxCoupon.getId());
if(maxTakeRate == null){
maxTakeRate = 0;
}

return rate + maxTakeRate;
}

/**
* 获取支付渠道费+系统服务费+销售抽成+平台服务费
* @param appinfo
* @param payAccount
* @param categoryId
* @return
*/
private int getOtherAllFee(WxAppinfo appinfo,WxPayAccount payAccount,Integer categoryId){
ServiceFeeAdapterService serviceFeeService = payServiceFactory.getServiceFeeAdapterService(appinfo.getPlat());
int realRate = serviceFeeService.getRealRate(payAccount);
int systemCommission = serviceFeeService.getSystemCommission(categoryId,payAccount);
int sellCommission = serviceFeeService.getSellCommission(payAccount);
int officialCommission = serviceFeeService.getOfficialCommission(categoryId, payAccount);

int rate = realRate + systemCommission + sellCommission + officialCommission;
return rate;
}



+ 9
- 0
mallinkService/src/main/java/com/iformall/service/impl/TtGoodsCategoryServiceImpl.java Просмотреть файл

@@ -552,6 +552,15 @@ public class TtGoodsCategoryServiceImpl implements TtGoodsCategoryService {
}
}

@Override
public int getTtServiceFee(Integer categoryId) {
TtGoodsCategory goodsCategory = ttGoodsCategoryMapper.selectById(categoryId);
if(goodsCategory != null){
return goodsCategory.getServiceFee();
}
return 0;
}

/**
* 循环同步类目
* @param ttWebService


+ 17
- 0
mallinkService/src/main/java/com/iformall/service/impl/TtMallGoodsCategoryServiceImpl.java Просмотреть файл

@@ -85,6 +85,23 @@ public class TtMallGoodsCategoryServiceImpl implements TtMallGoodsCategoryServic
updateFeeByIds(record,record.getCategoryId(),record.getMallSoftwareFee(),new Date());
}

@Override
public int getMallSoftwareFee(TenantEntity tenantEntity, Integer categoryId) {
TtMallGoodsCategory mallGoodsCategory = new TtMallGoodsCategory();
mallGoodsCategory.setGoodsCategoryId(categoryId);
mallGoodsCategory.updateTenantInfo(tenantEntity);
mallGoodsCategory = ttMallGoodsCategoryMapper.selectByTenantAndCategoryId(mallGoodsCategory);
if(mallGoodsCategory != null){
return mallGoodsCategory.getSoftwareFee();
}else{
TtGoodsCategory goodsCategory = ttGoodsCategoryMapper.selectById(categoryId);
if(goodsCategory != null){
return goodsCategory.getSoftwareFee();
}
}
return 0;
}

/**
* 循环修改费率
*/


+ 5
- 0
mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java Просмотреть файл

@@ -1967,5 +1967,10 @@ public class WxCouponServiceImpl implements WxCouponService {
return false;
}

@Override
public Integer getCategoryId(TenantEntity tenantEntity, Long couponId) {
return wxCouponMapper.findCategoryIdById(couponId,tenantEntity.getTenantId());
}


}

+ 19
- 12
mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java Просмотреть файл

@@ -25,6 +25,7 @@ import com.iformall.service.*;
import com.iformall.service.order.entity.WxComposeChildOrderShare;
import com.iformall.service.order.util.OrderHelper;
import com.iformall.service.pay.PayServiceFactory;
import com.iformall.service.pay.service.fee.ServiceFeeAdapterService;
import com.iformall.service.pay.service.pay.douyin.v1.miniApp.EnumTtPayChannel;
import com.iformall.service.pay.service.share.PayShareAdapterService;
import com.iformall.service.pay.service.share.entity.PayShareCalculateAmount;
@@ -217,6 +218,8 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
WxAppinfo cAppInfo = wxAppinfoService.getCAppInfo(sharingOrder, enumPlat);
WxPayAccount payAccount = wxPayAccountMapper.selectById(cAppInfo.getPayId());

ServiceFeeAdapterService serviceFeeService = payServiceFactory.getServiceFeeAdapterService(enumPlat.getCode());

WxComposeChildOrderShare wxComposeChildOrderShare = null;
if(sharingOrder.getSingleOrderId() != null){
wxComposeChildOrderShare = payOrder.getChildOrderShare(sharingOrder.getSingleOrderId());
@@ -225,24 +228,27 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
}
wxComposeChildOrderShare.setCpsCommission(cpsCommission);

//官方手续费千6
int realRateAmount = PayUtils.getPayRate(wxComposeChildOrderShare.getRealPayMent(), payAccount.getRealRate(), true);
//官方手续费---千6
int realRate = serviceFeeService.getRealRate(payAccount);
int realRateAmount = PayUtils.getPayRate(wxComposeChildOrderShare.getRealPayMent(), realRate, true);
wxComposeChildOrderShare.setRealRateAmount(realRateAmount);

//官方平台抽佣
int rate = payShareAdapterService.getOfficialCommission(wxComposeChildOrderShare.getOrderId(),payAccount);
int rate = serviceFeeService.getOfficialCommissionByOrder(wxComposeChildOrderShare.getOrderId(),payAccount);
int commissionAmount = PayUtils.getPayRate(wxComposeChildOrderShare.getRealPayMent(), rate, true);
wxComposeChildOrderShare.setCommissionAmount(commissionAmount);

int surplus = 0;//当广场抽成帐号与收款帐号相等,无法添加分账方,计入商管商户中
//只有抖音直连才有分账
//只有抖音才有抽成
//微信缺少流程(分账帐号绑定) 无法抽成
if(EnumPayWay.PAY_WAY_TT.getCode().equals(payOrder.getPayVendor())
&& EnumPayMchType.DIRECT.getCode().equals(payOrder.getMchType())
&& EnumYesOrNo.YES.getCode().equals(payAccount.getIsCommission())){
//销售抽点+系统抽点
int selSysAmount = PayUtils.getPayRate(wxComposeChildOrderShare.getRealPayMent(), payAccount.getSellRate()+payAccount.getSystemRate(), false);
int systemCommission = serviceFeeService.getSystemCommissionByOrder(wxComposeChildOrderShare.getOrderId(), payAccount);
int sellCommission = serviceFeeService.getSellCommission(payAccount);
int selSysAmount = PayUtils.getPayRate(wxComposeChildOrderShare.getRealPayMent(), systemCommission+sellCommission, false);
//销售抽点
int sellerAmount = PayUtils.getPayRate(wxComposeChildOrderShare.getRealPayMent(), payAccount.getSellRate(), false);
int sellerAmount = PayUtils.getPayRate(wxComposeChildOrderShare.getRealPayMent(), sellCommission, false);
wxComposeChildOrderShare.setSellerAmount(sellerAmount);
boolean isSeller = false;
if(sellerAmount > 0){
@@ -318,7 +324,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
wxComposeChildOrderShare.setServiceAmount(null);
}
//商户所得
int shareAmount = wxComposeChildOrderShare.getShareAmount() + surplus;
int shareAmount = wxComposeChildOrderShare.getShareAmount();

boolean isCallSharing = false;//是否调用分账
boolean isCreateSubsidy = false;//是否需要记账
@@ -424,12 +430,13 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
}

if(isSharingResult){
int sharingSubsidyAmount = shareAmount+surplus;
if(EnumPayMchType.TOTAL.getCode().equals(payOrder.getMchType())){
//解冻给收款方(广场)
//解冻给收款方(广场) +抽成没抽过去的。surplus
JSONObject jo = new JSONObject();
// jo.put("type",EnumProfitPaymentReceiverType.wx_special_merchant_number.getMessage());
jo.put("account",payAccount.getSubMchId());
jo.put("amount", shareAmount);
jo.put("amount", sharingSubsidyAmount);
jo.put("merchantId",0);
jo.put("bTenantId",payOrder.getTenantId());
jo.put("description",0);
@@ -441,13 +448,13 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
if(receiver != null && receiver.getReceiverAccount().equals(wxComposeChildOrderShare.getMerchantUid())){
jo.put("type",EnumProfitPaymentReceiverType.getEnum(receiver.getReceiverType()).getMessage());
jo.put("account",receiver.getReceiverAccount());
jo.put("amount", shareAmount);
jo.put("amount", sharingSubsidyAmount);
jo.put("merchantId",receiver.getMerchantId());
jo.put("bTenantId",receiver.getTenantId());
jo.put("description",receiver.getId());
}else{
jo.put("account",wxComposeChildOrderShare.getMerchantUid());
jo.put("amount", shareAmount);
jo.put("amount", sharingSubsidyAmount);
jo.put("merchantId",wxComposeChildOrderShare.getMerchantId());
jo.put("bTenantId",payOrder.getTenantId());
jo.put("description",0);


+ 8
- 8
mallinkService/src/main/java/com/iformall/service/order/entity/WxComposeChildOrderShare.java Просмотреть файл

@@ -75,27 +75,27 @@ public class WxComposeChildOrderShare {
if(this.realRateAmount == null){
return;
}
int sumAmount = this.realRateAmount.intValue();
int sumAmount = this.realRateAmount.intValue();//支付通道费
if(this.commissionAmount != null){
sumAmount += this.commissionAmount.intValue();
sumAmount += this.commissionAmount.intValue();//平台服务费
}
if(this.cpsCommission != null){
sumAmount += this.cpsCommission.intValue();
sumAmount += this.cpsCommission.intValue();//达人佣金
}
if(this.systemAmount != null){
sumAmount += this.systemAmount;
sumAmount += this.systemAmount;//系统扣点
}
if(this.sellerAmount != null){
sumAmount += this.sellerAmount;
sumAmount += this.sellerAmount;//销售扣点
}

if(serviceAmount == null || serviceAmount.intValue() < sumAmount){
this.serviceAmount = sumAmount;
}else{
this.serviceAmount = serviceAmount;
this.serviceAmount = serviceAmount;//一笔订单总扣除手续费
}
this.rateAmount = this.serviceAmount.intValue() - sumAmount;
this.shareAmount = this.realPayMent.intValue() - this.serviceAmount.intValue();
this.rateAmount = this.serviceAmount.intValue() - sumAmount;//剩下的就是给商场的
this.shareAmount = this.realPayMent.intValue() - this.serviceAmount.intValue();//这就是给商户的
}

}

+ 26
- 0
mallinkService/src/main/java/com/iformall/service/pay/PayServiceFactory.java Просмотреть файл

@@ -4,6 +4,9 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import com.iformall.enums.EnumAppPlat;
import com.iformall.enums.EnumPayVersion;
import com.iformall.service.pay.service.fee.ServiceFeeAdapterService;
import com.iformall.service.pay.service.fee.TtServiceFeeService;
import com.iformall.service.pay.service.fee.WxServiceFeeService;
import com.iformall.service.pay.service.refund.douyin.TtRefundAdapterService;
import com.iformall.service.pay.service.refund.wx.v2.WxRefundAdapterService;
import com.iformall.service.pay.service.refund.wx.v3.WxRefundV3AdapterService;
@@ -45,6 +48,7 @@ public class PayServiceFactory {
private Map<String,PayShareAdapterService> shareMap = null;
private Map<String,RefundPayAdapterService> refundMap = null;
private Map<String,CashOutAdapterService> cashoutMap = null;
private Map<String,ServiceFeeAdapterService> serviceFeeMap = null;
@Autowired
WxMiniAppPayAdapterService wxMiniAppPayService;
@@ -86,6 +90,11 @@ public class PayServiceFactory {
WxCashOutQYFKAdapterService wxCashOutService;
@Autowired
WxCashOutSFTAdapterService wxCashOutSFTAdapterService;

@Autowired
TtServiceFeeService ttServiceFeeService;
@Autowired
WxServiceFeeService wxServiceFeeService;

@@ -193,6 +202,15 @@ public class PayServiceFactory {
}
return cashoutMap;
}

private Map<String,ServiceFeeAdapterService> getServiceFeeMap() {
if (null == serviceFeeMap ) {
serviceFeeMap = new ConcurrentHashMap<String, ServiceFeeAdapterService>();
serviceFeeMap.put(EnumAppPlat.WX.getCode()+"_", wxServiceFeeService);
serviceFeeMap.put(EnumAppPlat.TOUTIAO.getCode()+"_", ttServiceFeeService);
}
return serviceFeeMap;
}
public PayAdapterService getPayAdapterService(Integer type,Integer payVersion) throws MallinkException{
PayAdapterService service = getServiceMap().get(type+"_"+payVersion);
@@ -257,4 +275,12 @@ public class PayServiceFactory {
}
return cashOutService;
}

public ServiceFeeAdapterService getServiceFeeAdapterService(Integer plat)throws MallinkException {
ServiceFeeAdapterService serviceFeeService = getServiceFeeMap().get(plat+"_");
if (null == serviceFeeService) {
throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"payWay["+plat+"] 费率service未找到");
}
return serviceFeeService;
}
}

+ 61
- 0
mallinkService/src/main/java/com/iformall/service/pay/service/fee/ServiceFeeAdapterService.java Просмотреть файл

@@ -0,0 +1,61 @@
package com.iformall.service.pay.service.fee;

import com.iformall.domain.po.WxAppinfo;
import com.iformall.domain.po.WxCashOut;
import com.iformall.domain.po.WxPayAccount;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.service.pay.service.cashout.entity.CashOutAdapterResult;

/**
* 费率接口
* @author
*/
public interface ServiceFeeAdapterService {

/**
* 获取实际支付通道费率
* @param payAccount
* @return
*/
public int getRealRate(WxPayAccount payAccount);
/**
* 获取平台(微信,抖音等)抽佣手续费率(不包含支付通道费率)
* @return
*/
public int getOfficialCommission(Integer categoryId, WxPayAccount payAccount);
public int getOfficialCommissionByOrder(Long orderId, WxPayAccount payAccount);

/**
* 获取系统(富茂)抽佣手续费率
* @return
*/
public int getSystemCommission(Integer categoryId, WxPayAccount payAccount);
public int getSystemCommissionByOrder(Long orderId, WxPayAccount payAccount);

/**
* 获取第三方(销售)抽佣
*/
public int getSellCommission(WxPayAccount payAccount);

/**
* 获取达人佣金费率
* 多条数据 无法获取
* @return
*/
// public int getCPSCommission(TenantEntity tenantEntity, Long couponId);

/**
* 获取所有的总抽佣费率
* 如过设置了就返回,没设置返回0
*/
public int getAllCommission(Long couponId, WxPayAccount payAccount);

/**
* 获取商场抽佣费率
* 无法获取准确的达人拥挤费率, 无法计算
*/
// public int getMallCommission(Long couponId, WxPayAccount payAccount);


}

+ 127
- 0
mallinkService/src/main/java/com/iformall/service/pay/service/fee/TtServiceFeeService.java Просмотреть файл

@@ -0,0 +1,127 @@
package com.iformall.service.pay.service.fee;

import com.iformall.domain.po.TtPoiTakeRate;
import com.iformall.domain.po.WxOrder;
import com.iformall.domain.po.WxPayAccount;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.enums.EnumCpsPlanType;
import com.iformall.enums.EnumOrderType;
import com.iformall.enums.EnumYesOrNo;
import com.iformall.mapper.TtPoiTakeRateMapper;
import com.iformall.mapper.WxCouponMapper;
import com.iformall.mapper.WxOrderMapper;
import com.iformall.service.TtGoodsCategoryService;
import com.iformall.service.TtMallGoodsCategoryService;
import com.iformall.service.WxCouponService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Slf4j
@Service
public class TtServiceFeeService implements ServiceFeeAdapterService{

@Autowired
WxOrderMapper wxOrderMapper;

@Autowired
TtPoiTakeRateMapper ttPoiTakeRateMapper;

@Autowired
WxCouponService wxCouponService;

@Autowired
TtGoodsCategoryService ttGoodsCategoryService;

@Autowired
TtMallGoodsCategoryService ttMallGoodsCategoryService;


@Override
public int getRealRate(WxPayAccount payAccount) {
Integer realRate = payAccount.getRealRate();
if(realRate == null){
realRate = 60;
}
return realRate;
}

@Override
public int getOfficialCommission(Integer categoryId, WxPayAccount payAccount) {
if(categoryId != null){
int ttServiceFee = ttGoodsCategoryService.getTtServiceFee(categoryId);
int realRate = this.getRealRate(payAccount);
if(ttServiceFee > realRate){
return ttServiceFee - realRate;
}
}
return 0;
}

@Override
public int getOfficialCommissionByOrder(Long orderId, WxPayAccount payAccount) {
return getOfficialCommission(getCategoryIdByOrder(orderId,payAccount),payAccount);
}

@Override
public int getSystemCommission(Integer categoryId, WxPayAccount payAccount) {
if(categoryId != null){
if(EnumYesOrNo.YES.getCode().equals(payAccount.getIsCommission())){
int mallSoftwareFee = ttMallGoodsCategoryService.getMallSoftwareFee(payAccount, categoryId);
return mallSoftwareFee;
}
}
return 0;
}

@Override
public int getSystemCommissionByOrder(Long orderId, WxPayAccount payAccount) {
return getSystemCommission(getCategoryIdByOrder(orderId,payAccount),payAccount);
}

@Override
public int getSellCommission(WxPayAccount payAccount) {
if(EnumYesOrNo.YES.getCode().equals(payAccount.getIsCommission())){
Integer sellRate = payAccount.getSellRate();
if(sellRate != null){
return sellRate;
}
}
return 0;
}

// @Override
// public int getCPSCommission(TenantEntity tenantEntity, Long couponId) {
// return 0;
// }

@Override
public int getAllCommission(Long couponId, WxPayAccount payAccount) {
int allRate = 0;
if(EnumYesOrNo.YES.getCode().equals(payAccount.getIsCommission())){
TtPoiTakeRate ttPoiTakeRate = ttPoiTakeRateMapper.selectByCoupon(payAccount.getTenantId(), couponId, EnumCpsPlanType.ALL.getCode());
if(ttPoiTakeRate != null && ttPoiTakeRate.getTakeRate() != null){
allRate = ttPoiTakeRate.getTakeRate().intValue();
}
}

return allRate;
}

// @Override
// public int getMallCommission(Long couponId, WxPayAccount payAccount) {
// return 0;
// }



private Integer getCategoryIdByOrder(Long orderId,TenantEntity tenantEntity){
WxOrder o = wxOrderMapper.selectById(orderId, tenantEntity.getTenantId());
if(!EnumOrderType.COUPON.getCode().equals(o.getType())){
return null;
}
Integer categoryId = wxCouponService.getCategoryId(tenantEntity,o.getProductId());
return categoryId;
}

}

+ 98
- 0
mallinkService/src/main/java/com/iformall/service/pay/service/fee/WxServiceFeeService.java Просмотреть файл

@@ -0,0 +1,98 @@
package com.iformall.service.pay.service.fee;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.iformall.common.ErrorCode;
import com.iformall.domain.po.*;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.enums.*;
import com.iformall.exception.MallinkException;
import com.iformall.mapper.WxAppinfoMapper;
import com.iformall.mapper.WxPayAccountMapper;
import com.iformall.mapper.WxPayOrderMapper;
import com.iformall.pay.*;
import com.iformall.service.WxProfitPaymentReceiverService;
import com.iformall.service.WxProfitSharingReceiverService;
import com.iformall.service.pay.service.share.PayShareBaseAdapterService;
import com.iformall.service.pay.service.share.entity.PayShareQueryResult;
import com.iformall.service.pay.service.share.entity.PayShareResult;
import com.iformall.service.pay.service.share.entity.ShareAccountResult;
import com.iformall.service.pay.service.share.entity.ShareNotifyAdapterResult;
import com.iformall.utils.BeanUtils;
import com.iformall.utils.Utility;
import com.iformall.utils.XmlUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.ParseException;
import java.util.*;

@Slf4j
@Service
public class WxServiceFeeService implements ServiceFeeAdapterService{


@Override
public int getRealRate(WxPayAccount payAccount) {
Integer realRate = payAccount.getRealRate();
if(realRate == null){
realRate = 60;
}
return realRate;
}

@Override
public int getOfficialCommission(Integer categoryId, WxPayAccount payAccount) {
return 0;
}

@Override
public int getOfficialCommissionByOrder(Long orderId, WxPayAccount payAccount) {
return 0;
}

@Override
public int getSystemCommission(Integer categoryId, WxPayAccount payAccount) {
if(EnumYesOrNo.YES.getCode().equals(payAccount.getIsCommission())){
Integer systemRate = payAccount.getSystemRate();
if(systemRate != null){
return systemRate;
}
}
return 0;
}

@Override
public int getSystemCommissionByOrder(Long orderId, WxPayAccount payAccount) {
return getSystemCommission(null,payAccount);
}

@Override
public int getSellCommission(WxPayAccount payAccount) {
if(EnumYesOrNo.YES.getCode().equals(payAccount.getIsCommission())){
Integer sellRate = payAccount.getSellRate();
if(sellRate != null){
return sellRate;
}
}
return 0;
}

// @Override
// public int getCPSCommission(TenantEntity tenantEntity, Long couponId) {
// return 0;
// }

@Override
public int getAllCommission(Long couponId, WxPayAccount payAccount) {
return 0;
}

// @Override
// public int getMallCommission(Long couponId, WxPayAccount payAccount) {
// return 0;
// }
}

+ 0
- 8
mallinkService/src/main/java/com/iformall/service/pay/service/share/PayShareAdapterService.java Просмотреть файл

@@ -120,12 +120,4 @@ public interface PayShareAdapterService {
*/
int getCPSCommission(TenantEntity tenantEntity, Long orderId);

/**
* 获取官方佣金率
* @param o
* @param payAccount
* @return
*/
int getOfficialCommission(Long orderId, WxPayAccount payAccount);

}

+ 4
- 26
mallinkService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java Просмотреть файл

@@ -22,6 +22,7 @@ import com.iformall.douyin.payv2.result.ProfitSharingResult;
import com.iformall.enums.*;
import com.iformall.exception.MallinkException;
import com.iformall.mapper.*;
import com.iformall.service.TtGoodsCategoryService;
import com.iformall.service.WxProfitPaymentReceiverService;
import com.iformall.service.WxProfitSharingReceiverService;
import com.iformall.service.order.entity.WxComposeChildOrderShare;
@@ -70,10 +71,10 @@ public class TtPayShareService extends PayShareBaseAdapterService{
WxProfitSharingOrderMapper wxProfitSharingOrderMapper;

@Autowired
TtGoodsCategoryMapper ttGoodsCategoryMapper;
OrderCpsMapper orderCpsMapper;

@Autowired
OrderCpsMapper orderCpsMapper;
TtGoodsCategoryService ttGoodsCategoryService;
@Lazy
@Autowired
@@ -85,7 +86,7 @@ public class TtPayShareService extends PayShareBaseAdapterService{

/**
* 做为分账的扩展数据
* @param payOrder
* @param
* @return
*/
protected String getCpExtra(WxProfitSharingOrder record) {
@@ -290,29 +291,6 @@ public class TtPayShareService extends PayShareBaseAdapterService{
}
}

@Override
public int getOfficialCommission(Long orderId, WxPayAccount payAccount) {
WxOrder o = wxOrderMapper.selectById(orderId, payAccount.getTenantId());
if(!EnumOrderType.COUPON.getCode().equals(o.getType())){
return 0;
}
Integer categoryId = wxCouponMapper.findCategoryIdById(o.getProductId(),o.getTenantId());
if(categoryId != null){
TtGoodsCategory ttGoodsCategory = ttGoodsCategoryMapper.selectById(categoryId);
if(ttGoodsCategory != null && ttGoodsCategory.getServiceFee() != null){
if(ttGoodsCategory.getServiceFee().intValue() == 0){
return 0;
}
Integer realRate = payAccount.getRealRate();
if(realRate==null){
realRate = 60;
}
return ttGoodsCategory.getServiceFee().intValue() - realRate;
}
}
return 0;
}

@Override
public WxProfitSharingReceiver getSharingReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType) {
if(merchantId == null || merchantId.equals(0L)){


+ 0
- 5
mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/sft/WxPayShareSFTService.java Просмотреть файл

@@ -150,11 +150,6 @@ public class WxPayShareSFTService extends PayShareBaseAdapterService{
return 0;
}

@Override
public int getOfficialCommission(Long orderId, WxPayAccount payAccount) {
return 0;
}

@Override
public WxProfitSharingReceiver getSharingReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType) {
return null;


+ 0
- 5
mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v2/WxPayShareService.java Просмотреть файл

@@ -355,11 +355,6 @@ public class WxPayShareService extends PayShareBaseAdapterService{
return 0;
}

@Override
public int getOfficialCommission(Long orderId, WxPayAccount payAccount) {
return 0;
}

@Override
public WxProfitSharingReceiver getSharingReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType) {
if(merchantId == null || merchantId.equals(0L)){


+ 0
- 5
mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java Просмотреть файл

@@ -326,11 +326,6 @@ public class WxPayShareV3Service extends PayShareBaseAdapterService{
public int getCPSCommission(TenantEntity tenantEntity, Long orderId) {
return 0;
}

@Override
public int getOfficialCommission(Long orderId, WxPayAccount payAccount) {
return 0;
}

}

+ 3
- 0
mallinkService/src/main/java/com/iformall/utils/PayUtils.java Просмотреть файл

@@ -16,6 +16,9 @@ public class PayUtils {
* @return
*/
public static int getPayRate(int payAmount, int rate, boolean isReal) {
if(rate <= 0){
return 0;
}
Double dBaseAmount = 5.0D * 1000 / rate;
// 基础分 千分之6 83分
if (isReal) {


Загрузка…
Отмена
Сохранить