|
|
package com.yohoufo.order.service.impl;
|
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
import com.yoho.core.rest.client.ServiceCaller;
|
|
|
import com.yoho.error.ServiceError;
|
|
|
import com.yoho.error.exception.ServiceException;
|
|
|
import com.yohobuy.ufo.model.order.common.OrderAttributes;
|
|
|
import com.yohobuy.ufo.model.order.constants.ChangePriceStatus;
|
|
|
import com.yohobuy.ufo.model.order.constants.SkupType;
|
|
|
import com.yohobuy.ufo.model.promotion.UserCouponsBo;
|
|
|
import com.yohoufo.common.alarm.EventBusPublisher;
|
|
|
import com.yohoufo.common.exception.UfoServiceException;
|
|
|
import com.yohoufo.common.utils.AddressUtil;
|
|
|
import com.yohoufo.dal.order.SellerChangePriceRecordMapper;
|
|
|
import com.yohoufo.dal.order.SellerOrderGoodsMapper;
|
|
|
import com.yohoufo.dal.order.SellerOrderMapper;
|
|
|
import com.yohoufo.dal.order.model.SellerChangePriceRecord;
|
|
|
import com.yohoufo.dal.order.model.SellerOrder;
|
|
|
import com.yohoufo.dal.order.model.SellerOrderGoods;
|
|
|
import com.yohobuy.ufo.model.order.common.OrderCodeType;
|
|
|
import com.yohobuy.ufo.model.order.common.SkupStatus;
|
...
|
...
|
@@ -43,6 +50,7 @@ import com.yohoufo.order.service.support.codegenerator.OrderCodeGenerator; |
|
|
import com.yohoufo.order.utils.AddressHelper;
|
|
|
import com.yohoufo.order.utils.LoggerUtils;
|
|
|
import com.yohoufo.order.utils.MathUtils;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.commons.lang3.tuple.Pair;
|
|
|
import org.slf4j.Logger;
|
...
|
...
|
@@ -99,6 +107,11 @@ public class ShoppingServiceImpl implements IShoppingService { |
|
|
@Autowired
|
|
|
private CouponSupport couponSupport;
|
|
|
|
|
|
@Autowired
|
|
|
private SellerChangePriceRecordMapper sellerChangePriceRecordMapper;
|
|
|
|
|
|
@Autowired
|
|
|
private SellerOrderMapper sellerOrderMapper;
|
|
|
/**
|
|
|
* 结算页数据
|
|
|
* @param request
|
...
|
...
|
@@ -106,8 +119,9 @@ public class ShoppingServiceImpl implements IShoppingService { |
|
|
*/
|
|
|
public PaymentResponse payment(ShoppingRequest request){
|
|
|
int skup;
|
|
|
int uid;
|
|
|
// 入口参数检查
|
|
|
if ((skup=request.getSkup()) < 0 || request.getUid() <0){
|
|
|
if ((skup=request.getSkup()) < 0 || (uid=request.getUid()) <0){
|
|
|
logger.warn("payment uid or skup is null");
|
|
|
throw new ServiceException(ServiceError.ORDER_REQUEST_PARM_IS_EMPTY);
|
|
|
}
|
...
|
...
|
@@ -115,6 +129,7 @@ public class ShoppingServiceImpl implements IShoppingService { |
|
|
// 检查 商品sku是否可售
|
|
|
SellerOrderGoods skupGood = checkSkupSellOrNot(request.getSkup());
|
|
|
|
|
|
checkSkupIsChangePrice(uid, skup);
|
|
|
//构建算费
|
|
|
ChargeContext chargeContext = buildChargeContext(request, skupGood);
|
|
|
//算费
|
...
|
...
|
@@ -153,6 +168,19 @@ public class ShoppingServiceImpl implements IShoppingService { |
|
|
return skupGood;
|
|
|
}
|
|
|
|
|
|
private void checkSkupIsChangePrice(int buyerUid, int skup){
|
|
|
SellerOrder sellerOrder = sellerOrderMapper.selectBySkup(skup);
|
|
|
Long orderCode = sellerOrder.getOrderCode();
|
|
|
List<Short> statusList = Lists.newArrayList(ChangePriceStatus.WAITING_DEAL.getCode(),
|
|
|
ChangePriceStatus.SUCCESS.getCode());
|
|
|
List<SellerChangePriceRecord> scprs = sellerChangePriceRecordMapper.selectByPreOrderCodeNStatus(orderCode, statusList);
|
|
|
if (CollectionUtils.isNotEmpty(scprs)){
|
|
|
logger.warn("choose a change price goods,buyerUid {} skup {}", buyerUid, skup);
|
|
|
throw new UfoServiceException(401, "商品不可售,请重新选购");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
private ChargeContext buildChargeContext(ShoppingRequest request, SellerOrderGoods skupInfo) {
|
|
|
ChargeParam chargeParam = ChargeParam.builder().uid(request.getUid())
|
|
|
.deliveryWay(buildDeliveryWay())
|
...
|
...
|
@@ -202,13 +230,16 @@ public class ShoppingServiceImpl implements IShoppingService { |
|
|
public ComputeResponse compute(ShoppingRequest request) {
|
|
|
|
|
|
// 入口参数检查
|
|
|
if ((request.getSkup()) < 0 || request.getUid() < 0) {
|
|
|
int uid;
|
|
|
if ((request.getSkup()) < 0 || (uid=request.getUid()) < 0) {
|
|
|
logger.warn("compute uid or skup is null");
|
|
|
throw new ServiceException(ServiceError.ORDER_REQUEST_PARM_IS_EMPTY);
|
|
|
}
|
|
|
|
|
|
int skup;
|
|
|
// 检查 商品sku是否可售
|
|
|
SellerOrderGoods skupGood = checkSkupSellOrNot(request.getSkup());
|
|
|
SellerOrderGoods skupGood = checkSkupSellOrNot(skup=request.getSkup());
|
|
|
// 检查
|
|
|
checkSkupIsChangePrice(uid, skup);
|
|
|
//构建算费
|
|
|
ChargeContext chargeContext = buildChargeContext(request, skupGood);
|
|
|
//算费
|
...
|
...
|
@@ -230,10 +261,11 @@ public class ShoppingServiceImpl implements IShoppingService { |
|
|
* @return
|
|
|
*/
|
|
|
public OrderSubmitResponse submit(ShoppingRequest shoppingRequest){
|
|
|
|
|
|
int skup;
|
|
|
int uid;
|
|
|
// 入口参数检查
|
|
|
if (shoppingRequest.getSkup() < 0
|
|
|
|| shoppingRequest.getUid() < 0
|
|
|
if ((skup=shoppingRequest.getSkup()) < 0
|
|
|
|| (uid=shoppingRequest.getUid()) < 0
|
|
|
|| StringUtils.isEmpty(shoppingRequest.getAddressId())){
|
|
|
logger.warn("submit param is null");
|
|
|
throw new ServiceException(ServiceError.ORDER_REQUEST_PARM_IS_EMPTY);
|
...
|
...
|
@@ -245,6 +277,7 @@ public class ShoppingServiceImpl implements IShoppingService { |
|
|
// 检查skup是否可售
|
|
|
SellerOrderGoods psog = checkSkupSellOrNot(shoppingRequest.getSkup());
|
|
|
|
|
|
checkSkupIsChangePrice(uid, skup);
|
|
|
//算费
|
|
|
ChargeContext chargeContext = buildChargeContext(shoppingRequest,psog);
|
|
|
chargeService.charge(chargeContext);
|
...
|
...
|
@@ -258,9 +291,8 @@ public class ShoppingServiceImpl implements IShoppingService { |
|
|
|
|
|
// 减库存,skup更新成不可售,入库
|
|
|
//BigDecimal shipFee = new BigDecimal(delivery_way_sf_cost);
|
|
|
int uid;
|
|
|
OrderBuilder orderBuilder = OrderBuilder.builder()
|
|
|
.uid(uid=shoppingRequest.getUid())
|
|
|
.uid(uid)
|
|
|
.skup(shoppingRequest.getSkup())
|
|
|
.orderCode(orderCode)
|
|
|
.productId(psog.getProductId())
|
...
|
...
|
|