...
|
...
|
@@ -2,10 +2,18 @@ package com.yohoufo.order.service.impl; |
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.yoho.core.dal.datasource.annotation.Database;
|
|
|
import com.yohoufo.dal.order.SellerOrderMetaMapper;
|
|
|
import com.yohoufo.common.utils.BigDecimalHelper;
|
|
|
import com.yohoufo.dal.order.*;
|
|
|
import com.yohoufo.dal.order.model.BuyerOrder;
|
|
|
import com.yohoufo.dal.order.model.BuyerOrderGoods;
|
|
|
import com.yohoufo.dal.order.model.SellerOrder;
|
|
|
import com.yohoufo.dal.order.model.SellerOrderMeta;
|
|
|
import com.yohoufo.order.constants.MetaKey;
|
|
|
import com.yohoufo.order.model.SellerOrderContext;
|
|
|
import com.yohoufo.order.model.dto.EarnestMoney;
|
|
|
import com.yohoufo.order.model.dto.SellerOrderComputeResult;
|
|
|
import com.yohoufo.order.model.dto.ServiceFeeRate;
|
|
|
import com.yohoufo.order.model.request.OrderRequest;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
...
|
...
|
@@ -13,6 +21,8 @@ import org.springframework.stereotype.Service; |
|
|
import org.springframework.transaction.annotation.Propagation;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
|
/**
|
|
|
* Created by chenchao on 2018/9/17.
|
|
|
*/
|
...
|
...
|
@@ -25,6 +35,21 @@ public class SellerFeeService { |
|
|
@Autowired
|
|
|
private SellerOrderMetaMapper somMapper;
|
|
|
|
|
|
@Autowired
|
|
|
private BuyerOrderGoodsMapper buyerOrderGoodsMapper;
|
|
|
|
|
|
@Autowired
|
|
|
private BuyerOrderMapper buyerOrderMapper;
|
|
|
|
|
|
@Autowired
|
|
|
private SellerOrderMapper sellerOrderMapper;
|
|
|
|
|
|
@Autowired
|
|
|
private SellerOrderGoodsMapper sellerOrderGoodsMapper;
|
|
|
|
|
|
@Autowired
|
|
|
private SellerOrderMetaMapper sellerOrderMetaMapper;
|
|
|
|
|
|
@Transactional(propagation = Propagation.REQUIRED)
|
|
|
@Database(ForceMaster=true, DataSource="ufo_order")
|
|
|
public int saveFee(SellerOrderContext ctx){
|
...
|
...
|
@@ -37,4 +62,77 @@ public class SellerFeeService { |
|
|
som.setMetaValue(value);
|
|
|
return somMapper.insertSelective(som);
|
|
|
}
|
|
|
|
|
|
|
|
|
public SellerOrderComputeResult getSellerOrderComputeResult(int uid, int skup){
|
|
|
try {
|
|
|
SellerOrderMeta meta = somMapper.selectByMetaKey(uid, skup, MetaKey.SELLER_FEE);
|
|
|
SellerOrderComputeResult computeResult = JSONObject.parseObject(meta.getMetaValue(), SellerOrderComputeResult.class);
|
|
|
return computeResult;
|
|
|
}catch (Exception ex){
|
|
|
logger.warn("in getSellerOrderComputeResult fail uid {}, skup {}", uid, skup);
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 买家赔付的赔偿金=卖家实际支付的保证金*(1-抽成指数)
|
|
|
* @param skup
|
|
|
* @return
|
|
|
*/
|
|
|
public BigDecimal computeBuyerCompensate(int skup){
|
|
|
logger.info("in compute Buyer Compensate skup {}", skup);
|
|
|
long orderCode;
|
|
|
if(skup <= 0){
|
|
|
return null;
|
|
|
}
|
|
|
try {
|
|
|
|
|
|
SellerOrder sellerOrder = sellerOrderMapper.selectBySkup(skup);
|
|
|
SellerOrderComputeResult computeResult = getSellerOrderComputeResult(sellerOrder.getUid(), skup);
|
|
|
if(computeResult == null){
|
|
|
return null;
|
|
|
}
|
|
|
ServiceFeeRate serviceFeeRate = computeResult.getServiceFeeRate();
|
|
|
EarnestMoney earnestMoney = computeResult.getEarnestMoney();
|
|
|
BigDecimal compensate = earnestMoney.getEarnestMoney().subtract(earnestMoney.getEarnestMoney().multiply(serviceFeeRate.getEarnestMoneyRate()));
|
|
|
return compensate;
|
|
|
} catch (Exception ex){
|
|
|
logger.warn("in computeCompensate by skup {} occur error", skup, ex);
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 买家赔付的赔偿金=卖家实际支付的保证金*(1-抽成指数)
|
|
|
* @param orderRequest
|
|
|
* @return
|
|
|
*/
|
|
|
public String computeCompensate(OrderRequest orderRequest){
|
|
|
int buyerUid;
|
|
|
long orderCode;
|
|
|
if((buyerUid=orderRequest.getUid()) <=0 || (orderCode = orderRequest.getOrderCode())<= 0L){
|
|
|
return "";
|
|
|
}
|
|
|
try {
|
|
|
BuyerOrder buyerOrder = buyerOrderMapper.selectByOrderCode(orderCode);
|
|
|
BuyerOrderGoods buyerOrderGoods = buyerOrderGoodsMapper.selectByOrderCode(buyerUid, orderCode);
|
|
|
SellerOrderComputeResult computeResult = getSellerOrderComputeResult(buyerOrder.getSellerUid(), buyerOrderGoods.getSkup());
|
|
|
if(computeResult == null){
|
|
|
return "";
|
|
|
}
|
|
|
ServiceFeeRate serviceFeeRate = computeResult.getServiceFeeRate();
|
|
|
EarnestMoney earnestMoney = computeResult.getEarnestMoney();
|
|
|
BigDecimal compensate = earnestMoney.getEarnestMoney().subtract(earnestMoney.getEarnestMoney().multiply(serviceFeeRate.getEarnestMoneyRate()));
|
|
|
return BigDecimalHelper.halfUp(compensate).toPlainString();
|
|
|
} catch (Exception ex){
|
|
|
logger.warn("in computeCompensate occur error, req {}", orderRequest, ex);
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
} |
...
|
...
|
|