Authored by sailing-PC\sailing

fix

... ... @@ -22,6 +22,11 @@ public interface BuyerOrderGoodsMapper {
int updateByPrimaryKey(BuyerOrderGoods record);
/**
* 这个是个错误的方法
* @param skup
* @return
*/
BuyerOrderGoods selectBySkup(Integer skup);
}
\ No newline at end of file
... ...
package com.yohoufo.dal.order;
import com.yohoufo.dal.order.model.BuyerOrderMeta;
import com.yohoufo.dal.order.model.SellerOrderMeta;
import org.apache.ibatis.annotations.Param;
... ...
... ... @@ -4,15 +4,15 @@ import com.yohobuy.ufo.model.order.resp.PageResp;
import com.yohoufo.common.ApiResponse;
import com.yohoufo.common.annotation.IgnoreSession;
import com.yohoufo.common.annotation.IgnoreSignature;
import com.yohoufo.common.cache.Cachable;
import com.yohoufo.order.common.TabType;
import com.yohoufo.order.model.request.OrderListRequest;
import com.yohoufo.order.model.request.OrderRequest;
import com.yohoufo.order.model.response.OrderDetailInfo;
import com.yohoufo.order.model.response.OrderListInfo;
import com.yohoufo.order.service.IBuyerOrderService;
import com.yohoufo.order.service.impl.SellerOrderService;
import com.yohoufo.order.service.impl.SellerFeeService;
import com.yohoufo.order.service.impl.SellerOrderService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -30,6 +30,9 @@ public class BuyerOrderController {
@Autowired
private SellerOrderService sellerOrderService;
@Autowired
private SellerFeeService sellerFeeService;
/**
* [购买]订单列表
* 1:
... ... @@ -195,7 +198,7 @@ public class BuyerOrderController {
.uid(uid)
.orderCode(orderCode)
.build();
String data = sellerOrderService.computeCompensate(orderRequest);
String data = sellerFeeService.computeCompensate(orderRequest);
LOG.info("method ufo.buyer.computeCompensate out, orderCode is {}, uid is {}", orderCode, uid);
... ...
... ... @@ -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;
}
}
}
... ...
... ... @@ -516,33 +516,5 @@ public class SellerOrderService implements IOrderListService, IOrderDetailServi
return new OrderSummaryResp("sell", cnt);
}
@Autowired
private BuyerOrderGoodsMapper buyerOrderGoodsMapper;
/**
* 买家赔付的赔偿金=卖家实际支付的保证金*(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);
SellerOrderMeta meta = sellerOrderMetaMapper.selectByMetaKey(buyerOrder.getSellerUid(), buyerOrderGoods.getSkup(), MetaKey.SELLER_FEE);
SellerOrderComputeResult computeResult = JSONObject.parseObject(meta.getMetaValue(), SellerOrderComputeResult.class);
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){
log.warn("in computeCompensate occur error, req {}", orderRequest, ex);
return null;
}
}
}
... ...
... ... @@ -63,15 +63,19 @@ public class ShoppingServiceImpl implements IShoppingService {
@Autowired
private InBoxFacade inBoxFacade;
@Autowired
private SellerFeeService sellerFeeService;
/**
* 结算页数据
* @param request
* @return
*/
public PaymentResponse payment(ShoppingRequest request){
int skup;
// 入口参数检查
if (request.getSkup() < 0 || request.getUid() <0){
if ((skup=request.getSkup()) < 0 || request.getUid() <0){
logger.warn("payment uid or skup is null");
throw new ServiceException(ServiceError.ORDER_REQUEST_PARM_IS_EMPTY);
}
... ... @@ -87,9 +91,9 @@ public class ShoppingServiceImpl implements IShoppingService {
response.setAmount(skupGood.getGoodsPrice().add(new BigDecimal(delivery_way_sf_cost))
.setScale(2,BigDecimal.ROUND_HALF_UP).toPlainString());
// TODO 赔偿金计算
// response.setDamagesDesc(shoppingSupport.getDamagesDesc(null));
BigDecimal ompensate = sellerFeeService.computeBuyerCompensate(skup);
//赔偿金计算
response.setDamagesDesc(shoppingSupport.getDamagesDesc(ompensate));
return response;
}
... ...
... ... @@ -149,7 +149,7 @@ public class SubmitOrderServiceImpl implements ISubmitOrderService {
hiddenBOM.setOrderCode(orderBuilder.getOrderCode());
hiddenBOM.setMetaKey(MetaKey.BUYER_DELIVERY_HIDDEN_ADDRESS);
hiddenBOM.setMetaValue(JSONObject.toJSONString(orderBuilder.getHiddenAddressInfo()));
buyerOrderMetaMapper.insert(buyerOrderMeta);
buyerOrderMetaMapper.insert(hiddenBOM);
}
private void insertOrderGoods(OrderBuilder orderBuilder, SellerOrderGoods sellerOrderGoods) {
... ...
... ... @@ -92,6 +92,9 @@ public class ShoppingSupport {
* @return
*/
public String getDamagesDesc(BigDecimal damagedPrice){
if (damagedPrice == null){
return "";
}
StringBuilder damagesDesc = new StringBuilder();
damagesDesc.append(OrderConstant.DAMAGES_DESC);
damagesDesc.append(OrderConstant.MONEY_SIGN);
... ...