|
@@ -46,8 +46,8 @@ public class SplitAccountService extends BaseService {
|
|
private CmReportingClubMapper cmReportingClubMapper;
|
|
private CmReportingClubMapper cmReportingClubMapper;
|
|
|
|
|
|
/**
|
|
/**
|
|
- * !!!!注意:分帐时合利宝收费规则为谁分收谁0.1%手续费,这里是供应商承担的,如果要采美,服务商承担各自的费用,要提前计算好!!!
|
|
|
|
- *
|
|
|
|
|
|
+ * !!!!注意:分帐时合利宝收费规则为谁分收谁0.1%手续费,这里是供应商承担的,如果要采美,服务商承担各自的费用,要提前计算好!!!
|
|
|
|
+ * <p>
|
|
* 当前版本分帐逻辑变更,前台传入分帐帐号及金额,直接分帐
|
|
* 当前版本分帐逻辑变更,前台传入分帐帐号及金额,直接分帐
|
|
* splits : "E123456,10;E123456,20;E123456,30"
|
|
* splits : "E123456,10;E123456,20;E123456,30"
|
|
*
|
|
*
|
|
@@ -616,4 +616,88 @@ public class SplitAccountService extends BaseService {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 根据订单情况给予分账信息提示,返回分帐号;对应分账金额
|
|
|
|
+ * 1.非服务商模式(供应商+采美分账 /徳玛莉)
|
|
|
|
+ * 2.服务商模式(供应商+采美+服务商分账 /锦波)
|
|
|
|
+ *
|
|
|
|
+ * @param shopOrderId
|
|
|
|
+ */
|
|
|
|
+ public CmSplitParams getSplitParams(String shopOrderId) {
|
|
|
|
+ CmSplitParams params = newOrderDao.findSplitParams(shopOrderId);
|
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
|
+ calendar.setTime(new Date());
|
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
|
+ String currentTime = format.format(calendar.getTime());
|
|
|
|
+ List<OrderReceiptRelationPo> orderRelations = newOrderDao.getUndividedPaidReceipt(currentTime, shopOrderId);
|
|
|
|
+ if (null != params.getProviderId()) {
|
|
|
|
+ // 服务商
|
|
|
|
+ params.setSplitType(1);
|
|
|
|
+ } else {
|
|
|
|
+ // 非服务商
|
|
|
|
+ params.setSplitType(2);
|
|
|
|
+ }
|
|
|
|
+ getProcedureFee(params, orderRelations);
|
|
|
|
+ return params;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void getProcedureFee(CmSplitParams params, List<OrderReceiptRelationPo> orderRelations) {
|
|
|
|
+ /** 总收款手续费
|
|
|
|
+ * 如存在多次收款,则存在多次手续费,当前业务一般不会出现
|
|
|
|
+ */
|
|
|
|
+ AtomicReference<Double> totalReceiveCommission = new AtomicReference<>(0d);
|
|
|
|
+ orderRelations.forEach(o -> {
|
|
|
|
+ double splitAmount = o.getAssociateAmount();
|
|
|
|
+ // 收款手续费
|
|
|
|
+ double receiveCommission;
|
|
|
|
+ if (12 == o.getPayType()) {
|
|
|
|
+ receiveCommission = 10.00;
|
|
|
|
+ } else if (17 == o.getPayType()) {
|
|
|
|
+ //b2c 0.2%
|
|
|
|
+ receiveCommission = MathUtil.mul(splitAmount, 0.002, 2).doubleValue();
|
|
|
|
+ //b2c最低手续费0.1
|
|
|
|
+ if (receiveCommission < 0.1) {
|
|
|
|
+ receiveCommission = 0.1;
|
|
|
|
+ }
|
|
|
|
+ } else if (13 == o.getPayType() || 15 == o.getPayType()) {
|
|
|
|
+ //微信0.65%
|
|
|
|
+ receiveCommission = MathUtil.mul(splitAmount, 0.0065, 2).doubleValue();
|
|
|
|
+ } else if (29 == o.getPayType()) {
|
|
|
|
+ receiveCommission = MathUtil.mul(splitAmount, 0.003, 2).doubleValue();
|
|
|
|
+ if (receiveCommission < 0.1) {
|
|
|
|
+ receiveCommission = 0.1;
|
|
|
|
+ }
|
|
|
|
+ } else if (30 == o.getPayType()) {
|
|
|
|
+ receiveCommission = MathUtil.mul(splitAmount, 0.006, 2).doubleValue();
|
|
|
|
+ if (receiveCommission < 0.1) {
|
|
|
|
+ receiveCommission = 0.1;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ //手续费 支付宝0.25%
|
|
|
|
+ receiveCommission = MathUtil.mul(splitAmount, 0.0025, 2).doubleValue();
|
|
|
|
+ }
|
|
|
|
+ if (MathUtil.compare(receiveCommission, 0.01) <= 0) {
|
|
|
|
+ receiveCommission = 0.01;
|
|
|
|
+ }
|
|
|
|
+ // 收款手续费
|
|
|
|
+ totalReceiveCommission.set(MathUtil.add(receiveCommission,totalReceiveCommission.get()).doubleValue());
|
|
|
|
+ });
|
|
|
|
+ /** todo 当前服务商模式默认 91%供应商,1%采美,8%服务商,后续应该后台加入分配比例,取值自动计算,或者使用商品编辑中的比例分账,在分账页手选服务商分帐号
|
|
|
|
+ * todo 当前形式仅支持单商品子订单,未考虑子订单多商品
|
|
|
|
+ * 这里用订单实付 - 手续费 - 分账金额 * 0.1% - 采美佣金 - 服务商佣金= 供应商结算
|
|
|
|
+ */
|
|
|
|
+ Double cmSplitAccount = MathUtil.mul(params.getNeedPayAmount(), 0.01, 2).doubleValue();
|
|
|
|
+ Double providerSplitAccount = MathUtil.mul(params.getNeedPayAmount(), 0.08, 2).doubleValue();
|
|
|
|
+ /** 分账手续费 shopSplitCommission **/
|
|
|
|
+ Double shopSplitCommission = MathUtil.mul(MathUtil.add(cmSplitAccount, providerSplitAccount), 0.001, 2).doubleValue();
|
|
|
|
+ BigDecimal totalSplit = MathUtil.add(cmSplitAccount, providerSplitAccount);
|
|
|
|
+ BigDecimal totalCommission = MathUtil.add(totalReceiveCommission.get(), shopSplitCommission);
|
|
|
|
+ Double shopSplitAccount = MathUtil.sub(params.getNeedPayAmount(), MathUtil.add(totalSplit, totalCommission)).doubleValue();
|
|
|
|
+
|
|
|
|
+ params.setCmSplitAccount(cmSplitAccount);
|
|
|
|
+ params.setProviderSplitAccount(providerSplitAccount);
|
|
|
|
+ params.setShopSplitAccount(shopSplitAccount);
|
|
|
|
+ params.setShopCommission(totalReceiveCommission.get());
|
|
|
|
+ params.setShopSplitCommission(shopSplitCommission);
|
|
|
|
+ }
|
|
}
|
|
}
|