|
|
|
@@ -4,12 +4,10 @@ import com.github.pagehelper.PageHelper; |
|
|
|
import com.github.pagehelper.PageInfo; |
|
|
|
import com.simple.common.ErrorCode; |
|
|
|
import com.simple.common.IdWorker; |
|
|
|
import com.simple.common.ResultData; |
|
|
|
import com.simple.domain.po.WxCUser; |
|
|
|
import com.simple.domain.po.WxCoupon; |
|
|
|
import com.simple.domain.po.WxCouponOrder; |
|
|
|
import com.simple.domain.po.WxOrder; |
|
|
|
import com.simple.domain.vo.WxCouponOrderCVo; |
|
|
|
import com.simple.domain.vo.WxOrderCVo; |
|
|
|
import com.simple.enums.*; |
|
|
|
import com.simple.exception.MallinkException; |
|
|
|
@@ -23,9 +21,7 @@ import org.springframework.transaction.annotation.Propagation; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
import java.util.Date; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
@Service |
|
|
|
public class WxOrderServiceImpl implements WxOrderService { |
|
|
|
@@ -161,11 +157,11 @@ public class WxOrderServiceImpl implements WxOrderService { |
|
|
|
coupon = wxCouponMapper.selectByPrimaryKey(couponId); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("券未找到, e:" + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL.getCode(), "券未找到:" + couponIdStr); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_IS_EMPTY); |
|
|
|
} |
|
|
|
if (coupon == null) { |
|
|
|
logger.error("券未找到, " + couponIdStr); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL.getCode(), "券未找到:" + couponIdStr); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_IS_EMPTY); |
|
|
|
} |
|
|
|
|
|
|
|
coupon.setRemainInventory(coupon.getRemainInventory() + 1); |
|
|
|
@@ -173,8 +169,8 @@ public class WxOrderServiceImpl implements WxOrderService { |
|
|
|
try { |
|
|
|
wxCouponMapper.updateByPrimaryKeySelective(coupon); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("库存+1失败, e:" + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "库存+1失败, e:" + e.getMessage()); |
|
|
|
logger.error("数据库更新失败,库存+1失败, e:" + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "库存恢复失败"); |
|
|
|
} finally { |
|
|
|
//解锁 |
|
|
|
redisLock.unlock(couponIdStr, timeStr); |
|
|
|
@@ -214,12 +210,7 @@ public class WxOrderServiceImpl implements WxOrderService { |
|
|
|
*/ |
|
|
|
|
|
|
|
// 减库存操作 |
|
|
|
try { |
|
|
|
stockReduce(user, coupon, couponIdStr); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("减库存失败, couponId: " + couponIdStr); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(), "减库存失败, couponId: " + couponIdStr); |
|
|
|
} |
|
|
|
stockReduce(user, coupon, couponIdStr); |
|
|
|
|
|
|
|
Date curr = new Date(); |
|
|
|
|
|
|
|
@@ -250,10 +241,10 @@ public class WxOrderServiceImpl implements WxOrderService { |
|
|
|
// 保存订单 |
|
|
|
wxOrderMapper.insertSelective(record); |
|
|
|
} catch (RuntimeException e) { |
|
|
|
// 加库存 |
|
|
|
// 库存恢复 |
|
|
|
stockBack(record); |
|
|
|
logger.error("保存订单:" + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(), "保存订单失败:" + record.toString()); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_SAVE_ERR); |
|
|
|
} |
|
|
|
|
|
|
|
return record; |
|
|
|
@@ -272,24 +263,20 @@ public class WxOrderServiceImpl implements WxOrderService { |
|
|
|
coupon.getValidEndDate() : |
|
|
|
new Date((curr.getTime() / 1000 + coupon.getValidDays() * 24 * 60 * 60) * 1000); |
|
|
|
final IdWorker idWorker = IdWorker.get(); |
|
|
|
try { |
|
|
|
WxCouponOrder couponOrder = new WxCouponOrder(); |
|
|
|
couponOrder.setId(idWorker.nextId()); |
|
|
|
couponOrder.setTenantId(user.getTenantId()); |
|
|
|
couponOrder.setCouponId(order.getCouponId()); |
|
|
|
couponOrder.setCUserId(user.getId()); |
|
|
|
couponOrder.setOrderId(order.getOrderNumber()); |
|
|
|
couponOrder.setExpiredTime(valid_date); |
|
|
|
couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); |
|
|
|
couponOrder.setCreateDate(curr); |
|
|
|
couponOrder.setUpdateDate(curr); |
|
|
|
couponOrder.setCouponPrice(order.getPayment()); |
|
|
|
|
|
|
|
wxCouponOrderMapper.insertSelective(couponOrder); |
|
|
|
} catch (RuntimeException e) { |
|
|
|
logger.error("WxCouponOrder:" + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(), "couponOrder保存失败!"); |
|
|
|
} |
|
|
|
|
|
|
|
WxCouponOrder couponOrder = new WxCouponOrder(); |
|
|
|
couponOrder.setId(idWorker.nextId()); |
|
|
|
couponOrder.setTenantId(user.getTenantId()); |
|
|
|
couponOrder.setCouponId(order.getCouponId()); |
|
|
|
couponOrder.setCUserId(user.getId()); |
|
|
|
couponOrder.setOrderId(order.getOrderNumber()); |
|
|
|
couponOrder.setExpiredTime(valid_date); |
|
|
|
couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); |
|
|
|
couponOrder.setCreateDate(curr); |
|
|
|
couponOrder.setUpdateDate(curr); |
|
|
|
couponOrder.setCouponPrice(order.getPayment()); |
|
|
|
|
|
|
|
wxCouponOrderMapper.insertSelective(couponOrder); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@@ -315,7 +302,7 @@ public class WxOrderServiceImpl implements WxOrderService { |
|
|
|
} |
|
|
|
if (coupon.getStatus() == EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode()) { |
|
|
|
logger.error("券已下架, couponId: " + couponIdStr); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_INVALID); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_IS_TAKE_OFF); |
|
|
|
} |
|
|
|
if (coupon.getSalePrice() != 0) { |
|
|
|
logger.error("券不免费, couponId: " + couponIdStr); |
|
|
|
@@ -350,21 +337,22 @@ public class WxOrderServiceImpl implements WxOrderService { |
|
|
|
try { |
|
|
|
wxOrderMapper.insertSelective(record); |
|
|
|
} catch (Exception e) { |
|
|
|
//加库存 |
|
|
|
// 库存恢复 |
|
|
|
stockBack(record); |
|
|
|
logger.error("保存订单:" + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_IS_FAIL); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_SAVE_ERR); |
|
|
|
} |
|
|
|
|
|
|
|
// 创建couponOrder |
|
|
|
try { |
|
|
|
createCouponOrder(user, record, coupon); |
|
|
|
} catch (Exception e) { |
|
|
|
// 库存恢复 |
|
|
|
stockBack(record); |
|
|
|
logger.error("保存订单:" + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_IS_FAIL); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_ORDER_SAVE_ERR); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return record; |
|
|
|
} |
|
|
|
|
|
|
|
@@ -379,7 +367,7 @@ public class WxOrderServiceImpl implements WxOrderService { |
|
|
|
} |
|
|
|
if (coupon.getStatus() == EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode()) { |
|
|
|
logger.error("券已下架, couponId: " + updateOrder.getCouponId()); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_INVALID); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_IS_TAKE_OFF); |
|
|
|
} |
|
|
|
WxCUser user = wxCUserMapper.selectByPrimaryKey(updateOrder.getCUserId()); |
|
|
|
if (user == null) { |
|
|
|
@@ -395,14 +383,14 @@ public class WxOrderServiceImpl implements WxOrderService { |
|
|
|
ret = wxOrderMapper.updateByPrimaryKey(updateOrder); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("订单更新失败:" + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(), "订单更新失败:" + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_UPDATE_ERR); |
|
|
|
} |
|
|
|
// 创建couponOrder |
|
|
|
try { |
|
|
|
createCouponOrder(user, updateOrder, coupon); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("保存订单:" + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_IS_FAIL); |
|
|
|
throw new MallinkException(ErrorCode.COUPON_ORDER_SAVE_ERR); |
|
|
|
} |
|
|
|
return ret; |
|
|
|
} |
|
|
|
@@ -418,19 +406,19 @@ public class WxOrderServiceImpl implements WxOrderService { |
|
|
|
stockBack(updateOrder); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("库存+1失败, e:" + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "库存+1失败, e:" + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.REMAIN_BACK_FAIL); |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
updateOrder.setOrderStatus(enumOrderStatus.getCode()); |
|
|
|
updateOrder.setUpdateDate(currentDate); |
|
|
|
int ret = 0; |
|
|
|
try { |
|
|
|
updateOrder.setOrderStatus(enumOrderStatus.getCode()); |
|
|
|
updateOrder.setUpdateDate(currentDate); |
|
|
|
ret = wxOrderMapper.updateByPrimaryKey(updateOrder); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("订单状态更新失败, e:" + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "订单状态更新失败, e:" + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_UPDATE_ERR); |
|
|
|
} |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|