Authored by wujiexiang

Merge branch 'dev-promotion' of http://git.yoho.cn/ufo/yohoufo-fore into dev-promotion

# Conflicts:
#	order/src/main/java/com/yohoufo/order/service/impl/SubmitOrderServiceImpl.java
... ... @@ -157,7 +157,6 @@ public class RedisGwCacheClient implements CacheClient {
} else {
redisValue = JSON.toJSONString(value);
}
long beginTime = System.currentTimeMillis();
try {
valueOperations.set(key, redisValue, timeout, TimeUnit.SECONDS);
} catch (Exception e) {
... ... @@ -281,7 +280,6 @@ public class RedisGwCacheClient implements CacheClient {
cacheMap.put(key, JSON.toJSONString(value));
}
}
long beginTime = System.currentTimeMillis();
try {
redis.mset(cacheMap,timeout);
} catch (Exception e) {
... ...
... ... @@ -7,6 +7,7 @@ import com.yoho.core.transaction.YHTxCoordinator;
import com.yoho.core.transaction.annoation.YHTransaction;
import com.yoho.error.ServiceError;
import com.yoho.error.exception.ServiceException;
import com.yohoufo.common.alarm.CommonAlarmEventPublisher;
import com.yohoufo.dal.order.*;
import com.yohoufo.dal.order.model.*;
import com.yohoufo.order.common.ClientType;
... ... @@ -49,43 +50,46 @@ public class SubmitOrderServiceImpl implements ISubmitOrderService {
BuyerOrderSubmitResult result = null;
try {
// 减库存
if(productProxyService.subtractStorage(orderBuilder.getProductId(), orderBuilder.getSkup())) {
productProxyService.subtractStorage(orderBuilder.getProductId(), orderBuilder.getSkup());
try{
//使用优惠券
if (orderBuilder.getCouponBo().getCouponAmount().doubleValue() > 0) {
couponProxyService.orderUseCoupon(orderBuilder.getUid(), orderBuilder.getOrderCode(), orderBuilder.getCouponBo());
}
// 创建订单
return orderCreateService.createOrder(orderBuilder);
}catch (Exception e){
tx.rollback();
returnStrorageEx(orderBuilder);
throw e;
}
}catch (Exception ex){
tx.rollback();
logger.warn("in buyer createOrder fail, need return storage SaleSkup, uid {},ordercode {},Skup {} ",
orderBuilder.getUid(), orderBuilder.getOrderCode(), orderBuilder.getSkup(), ex);
if (!(ex instanceof ServiceException)) {
//上报告警事件
//EventBusPublisher.publishEvent(new SmsAlarmEvent(OrderHanders.submit, "submit", "订单(" + order.getOrderCode() + ")创建失败"));
throw new ServiceException(ServiceError.SHOPPING_SUBMIT_ORDER_FAIL, ex);
}
throw ex;
}
}
private void returnStrorageEx(OrderBuilder orderBuilder) {
try{
productProxyService.returnStorage(orderBuilder.getSkup());
try{
boolean returnStorageFlag = productProxyService.returnStorage(orderBuilder.getSkup());
}catch (Exception ex0){
// 补库存失败,需要报警手动补库存 TODO
if (!returnStorageFlag){
logger.warn("in buyer createOrder fail, need return storage SaleSkup, uid {},ordercode {},Skup {} ",
orderBuilder.getUid(), orderBuilder.getOrderCode(), orderBuilder.getSkup());
}
CommonAlarmEventPublisher.publish("还库存失败", "ufo.product.cancelSaleSkup", "sku:["+orderBuilder.getSkup()+"]");
// 还库存失败,上报到influxdb
logger.warn("in buyer createOrder fail, return storage fail, uid {},ordercode {},Skup {}",
orderBuilder.getUid(), orderBuilder.getOrderCode(), orderBuilder.getSkup(), ex0);
}catch (Exception ex0){
logger.warn("in buyer createOrder fail, return storage fail, uid {},ordercode {},Skup {}",
orderBuilder.getUid(), orderBuilder.getOrderCode(), orderBuilder.getSkup(), ex0);
}finally {
logger.warn("in buyer createOrder fail, need return storage SaleSkup, uid {},ordercode {},Skup {} ",
orderBuilder.getUid(), orderBuilder.getOrderCode(), orderBuilder.getSkup(), ex);
if (!(ex instanceof ServiceException)) {
//上报告警事件
//EventBusPublisher.publishEvent(new SmsAlarmEvent(OrderHanders.submit, "submit", "订单(" + order.getOrderCode() + ")创建失败"));
throw new ServiceException(ServiceError.SHOPPING_SUBMIT_ORDER_FAIL, ex);
}
throw ex;
}
}
return result;
}
... ...