|
@@ -132,182 +132,183 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
|
|
|
List<OmsOrderItem> orderItemList = new ArrayList<>();
|
|
|
//获取购物车及优惠信息
|
|
|
Long userId = SessionContextHolder.getId();
|
|
|
- List<OmsCartItemDTO> cartPromotionItemList = new ArrayList<>();
|
|
|
- if (CollectionUtils.isEmpty(orderParam.getCartIds())){
|
|
|
- //生成下单商品信息
|
|
|
- OmsOrderItem orderItem = new OmsOrderItem();
|
|
|
- orderItem.setGoodsId(orderParam.getGoodsInfo().getGoodsId());
|
|
|
- orderItem.setGoodsName(orderParam.getGoodsInfo().getGoodsName());
|
|
|
- orderItem.setGoodsPic(orderParam.getGoodsInfo().getGoodsPic());
|
|
|
- orderItem.setGoodsPrice(orderParam.getGoodsInfo().getPrice());
|
|
|
- orderItem.setGoodsQuantity(orderParam.getGoodsInfo().getQuantity());
|
|
|
- orderItem.setGoodsCategoryId(orderParam.getGoodsInfo().getGoodsCategoryId());
|
|
|
-// orderItem.setPromotionAmount(cartPromotionItem.getReduceAmount());
|
|
|
-// orderItem.setPromotionName(cartPromotionItem.getPromotionMessage());
|
|
|
- orderItem.setGiftIntegration(0L);
|
|
|
- orderItem.setGiftGrowth(0);
|
|
|
- Long merchantId = goodsService.queryMerchantIdByGoodId(orderItem.getGoodsId());
|
|
|
- orderItem.setMerchantId(merchantId);
|
|
|
- orderItemList.add(orderItem);
|
|
|
- }else{
|
|
|
- cartPromotionItemList = omsCartItemService.listPromotion(orderParam.getCartIds());
|
|
|
- for (OmsCartItemDTO cartPromotionItem : cartPromotionItemList) {
|
|
|
+ synchronized (String.valueOf(userId).intern()){
|
|
|
+ List<OmsCartItemDTO> cartPromotionItemList = new ArrayList<>();
|
|
|
+ if (CollectionUtils.isEmpty(orderParam.getCartIds())){
|
|
|
//生成下单商品信息
|
|
|
OmsOrderItem orderItem = new OmsOrderItem();
|
|
|
- orderItem.setGoodsId(cartPromotionItem.getGoodsId());
|
|
|
- orderItem.setGoodsName(cartPromotionItem.getGoodsName());
|
|
|
- orderItem.setGoodsPic(cartPromotionItem.getGoodsPic());
|
|
|
- orderItem.setGoodsAttr(cartPromotionItem.getGoodsAttr());
|
|
|
- orderItem.setGoodsBrand(cartPromotionItem.getGoodsBrand());
|
|
|
- orderItem.setGoodsSn(cartPromotionItem.getGoodsSn());
|
|
|
- orderItem.setGoodsPrice(cartPromotionItem.getPrice());
|
|
|
- orderItem.setGoodsQuantity(cartPromotionItem.getQuantity());
|
|
|
- orderItem.setGoodsSkuId(cartPromotionItem.getGoodsSkuId());
|
|
|
- orderItem.setGoodsSkuCode(cartPromotionItem.getGoodsSkuCode());
|
|
|
- orderItem.setGoodsCategoryId(cartPromotionItem.getGoodsCategoryId());
|
|
|
+ orderItem.setGoodsId(orderParam.getGoodsInfo().getGoodsId());
|
|
|
+ orderItem.setGoodsName(orderParam.getGoodsInfo().getGoodsName());
|
|
|
+ orderItem.setGoodsPic(orderParam.getGoodsInfo().getGoodsPic());
|
|
|
+ orderItem.setGoodsPrice(orderParam.getGoodsInfo().getPrice());
|
|
|
+ orderItem.setGoodsQuantity(orderParam.getGoodsInfo().getQuantity());
|
|
|
+ orderItem.setGoodsCategoryId(orderParam.getGoodsInfo().getGoodsCategoryId());
|
|
|
// orderItem.setPromotionAmount(cartPromotionItem.getReduceAmount());
|
|
|
// orderItem.setPromotionName(cartPromotionItem.getPromotionMessage());
|
|
|
orderItem.setGiftIntegration(0L);
|
|
|
orderItem.setGiftGrowth(0);
|
|
|
- orderItem.setMerchantId(cartPromotionItem.getMerchantId());
|
|
|
+ Long merchantId = goodsService.queryMerchantIdByGoodId(orderItem.getGoodsId());
|
|
|
+ orderItem.setMerchantId(merchantId);
|
|
|
orderItemList.add(orderItem);
|
|
|
+ }else{
|
|
|
+ cartPromotionItemList = omsCartItemService.listPromotion(orderParam.getCartIds());
|
|
|
+ for (OmsCartItemDTO cartPromotionItem : cartPromotionItemList) {
|
|
|
+ //生成下单商品信息
|
|
|
+ OmsOrderItem orderItem = new OmsOrderItem();
|
|
|
+ orderItem.setGoodsId(cartPromotionItem.getGoodsId());
|
|
|
+ orderItem.setGoodsName(cartPromotionItem.getGoodsName());
|
|
|
+ orderItem.setGoodsPic(cartPromotionItem.getGoodsPic());
|
|
|
+ orderItem.setGoodsAttr(cartPromotionItem.getGoodsAttr());
|
|
|
+ orderItem.setGoodsBrand(cartPromotionItem.getGoodsBrand());
|
|
|
+ orderItem.setGoodsSn(cartPromotionItem.getGoodsSn());
|
|
|
+ orderItem.setGoodsPrice(cartPromotionItem.getPrice());
|
|
|
+ orderItem.setGoodsQuantity(cartPromotionItem.getQuantity());
|
|
|
+ orderItem.setGoodsSkuId(cartPromotionItem.getGoodsSkuId());
|
|
|
+ orderItem.setGoodsSkuCode(cartPromotionItem.getGoodsSkuCode());
|
|
|
+ orderItem.setGoodsCategoryId(cartPromotionItem.getGoodsCategoryId());
|
|
|
+// orderItem.setPromotionAmount(cartPromotionItem.getReduceAmount());
|
|
|
+// orderItem.setPromotionName(cartPromotionItem.getPromotionMessage());
|
|
|
+ orderItem.setGiftIntegration(0L);
|
|
|
+ orderItem.setGiftGrowth(0);
|
|
|
+ orderItem.setMerchantId(cartPromotionItem.getMerchantId());
|
|
|
+ orderItemList.add(orderItem);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- //判断购物车中商品是否都有库存
|
|
|
+ //判断购物车中商品是否都有库存
|
|
|
// if (!hasStock(cartPromotionItemList)) {
|
|
|
// Asserts.fail("库存不足,无法下单");
|
|
|
// }
|
|
|
- //判断使用使用了优惠券
|
|
|
- boolean flag = false;
|
|
|
- if (orderParam.getUserCouponId() == null) {
|
|
|
- //不用优惠券
|
|
|
- for (OmsOrderItem orderItem : orderItemList) {
|
|
|
- orderItem.setCouponAmount(new BigDecimal(0));
|
|
|
- }
|
|
|
- } else {
|
|
|
- UserCoupon coupon = userCouponService.checkUseCoupon(orderParam.getUserCouponId(), userId);
|
|
|
- if (coupon == null) {
|
|
|
- Asserts.check(true, "该优惠券不可用");
|
|
|
- }
|
|
|
- //对下单商品的优惠券进行处理
|
|
|
- assert coupon != null;
|
|
|
- flag = handleCouponAmount(orderItemList, coupon);
|
|
|
- }
|
|
|
- //判断是否使用积分
|
|
|
- if (orderParam.getUseIntegration() == null || orderParam.getUseIntegration().equals(0)) {
|
|
|
- //不使用积分
|
|
|
- for (OmsOrderItem orderItem : orderItemList) {
|
|
|
- orderItem.setIntegrationAmount(new BigDecimal(0));
|
|
|
+ //判断使用使用了优惠券
|
|
|
+ boolean flag = false;
|
|
|
+ if (orderParam.getUserCouponId() == null) {
|
|
|
+ //不用优惠券
|
|
|
+ for (OmsOrderItem orderItem : orderItemList) {
|
|
|
+ orderItem.setCouponAmount(new BigDecimal(0));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ UserCoupon coupon = userCouponService.checkUseCoupon(orderParam.getUserCouponId(), userId);
|
|
|
+ if (coupon == null) {
|
|
|
+ Asserts.check(true, "该优惠券不可用");
|
|
|
+ }
|
|
|
+ //对下单商品的优惠券进行处理
|
|
|
+ assert coupon != null;
|
|
|
+ flag = handleCouponAmount(orderItemList, coupon);
|
|
|
}
|
|
|
- } else {
|
|
|
- //使用积分
|
|
|
- BigDecimal totalAmount = calcTotalAmount(orderItemList);
|
|
|
+ //判断是否使用积分
|
|
|
+ if (orderParam.getUseIntegration() == null || orderParam.getUseIntegration().equals(0)) {
|
|
|
+ //不使用积分
|
|
|
+ for (OmsOrderItem orderItem : orderItemList) {
|
|
|
+ orderItem.setIntegrationAmount(new BigDecimal(0));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //使用积分
|
|
|
+ BigDecimal totalAmount = calcTotalAmount(orderItemList);
|
|
|
// BigDecimal integrationAmount = getUseIntegrationAmount(orderParam.getUseIntegration(), totalAmount,
|
|
|
// currentMember, orderParam.getCouponId() != null);
|
|
|
// if (integrationAmount.compareTo(new BigDecimal(0)) == 0) {
|
|
|
// Asserts.check(true,"积分不可用");
|
|
|
// } else {
|
|
|
- //可用情况下分摊到可用商品中
|
|
|
+ //可用情况下分摊到可用商品中
|
|
|
// for (OmsOrderItemDTO orderItem : orderItemList) {
|
|
|
// BigDecimal perAmount = orderItem.getProductPrice().divide(totalAmount, 3, RoundingMode
|
|
|
// .HALF_EVEN).multiply(integrationAmount);
|
|
|
// orderItem.setIntegrationAmount(perAmount);
|
|
|
//// }
|
|
|
// }
|
|
|
- }
|
|
|
- //计算order_item的实付金额
|
|
|
- handleRealAmount(orderItemList);
|
|
|
- //进行库存锁定
|
|
|
+ }
|
|
|
+ //计算order_item的实付金额
|
|
|
+ handleRealAmount(orderItemList);
|
|
|
+ //进行库存锁定
|
|
|
// lockStock(cartPromotionItemList);
|
|
|
- //根据商品合计、运费、活动优惠、优惠券、积分计算应付金额
|
|
|
- OmsOrder order = new OmsOrder();
|
|
|
- order.setNote(orderParam.getNote());
|
|
|
- order.setDiscountAmount(new BigDecimal(0));
|
|
|
- order.setTotalAmount(calcTotalAmount(orderItemList));
|
|
|
- order.setFreightAmount(new BigDecimal(0));
|
|
|
- order.setPromotionAmount(calcPromotionAmount(orderItemList));
|
|
|
- order.setPromotionInfo(getOrderPromotionInfo(orderItemList));
|
|
|
- if (orderParam.getUserCouponId() == null || !flag) {
|
|
|
- order.setCouponAmount(new BigDecimal(0));
|
|
|
- } else {
|
|
|
- order.setCouponId(orderParam.getUserCouponId());
|
|
|
- order.setCouponAmount(calcCouponAmount(orderItemList));
|
|
|
- }
|
|
|
- if (orderParam.getUseIntegration() == null) {
|
|
|
- order.setIntegration(0);
|
|
|
- order.setIntegrationAmount(new BigDecimal(0));
|
|
|
- } else {
|
|
|
- order.setIntegration(orderParam.getUseIntegration());
|
|
|
- order.setIntegrationAmount(calcIntegrationAmount(orderItemList));
|
|
|
- }
|
|
|
- log.info("订单order:{}", order);
|
|
|
- order.setPayAmount(calcPayAmount(order));
|
|
|
- log.info("订单金额amount:{}", order.getPayAmount());
|
|
|
- //转化为订单信息并插入数据库
|
|
|
- order.setUserId(userId);
|
|
|
- order.setCreateTime(new Date());
|
|
|
- order.setMemberUsername(userId.toString());
|
|
|
- //支付方式:0->未支付;1->支付宝;2->微信;3->首信易(微信小程序)
|
|
|
- order.setPayType(orderParam.getPayType());
|
|
|
- //订单来源:0->PC订单;1->app订单
|
|
|
- order.setSourceType(1);
|
|
|
- //订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单
|
|
|
- order.setStatus(0);
|
|
|
- //订单类型:0->正常订单;1->秒杀订单
|
|
|
- order.setOrderType(0);
|
|
|
- //收货人信息:姓名、电话、邮编、地址
|
|
|
- UserReceiveAddressDTO address = this.userReceiveAddressService.queryById(orderParam.getUserReceiveAddressId());
|
|
|
- if (null != address){
|
|
|
- order.setReceiverName(address.getReceiveName());
|
|
|
- order.setReceiverPhone(address.getPhone());
|
|
|
- order.setReceiverPostCode(address.getPostCode());
|
|
|
- order.setReceiverProvince(address.getProvince());
|
|
|
- order.setReceiverCity(address.getCity());
|
|
|
- order.setReceiverRegion(address.getRegion());
|
|
|
- order.setReceiverDetailAddress(address.getDetailAddress());
|
|
|
- }
|
|
|
- //0->未确认;1->已确认
|
|
|
- order.setConfirmStatus(0);
|
|
|
- order.setDeleteStatus(0);
|
|
|
- //计算赠送积分
|
|
|
- order.setIntegration(calcGifIntegration(orderItemList));
|
|
|
- //计算赠送成长值
|
|
|
- order.setGrowth(0);
|
|
|
- //生成订单号
|
|
|
- order.setOrderSn(generateOrderSn(6));
|
|
|
- order.setMerchantId(orderParam.getMerchantId());
|
|
|
- order.setId(RedisContextHolder.sequence());
|
|
|
- //设置自动收货天数
|
|
|
- List<OmsOrderSetting> orderSettings = orderSettingService.listOrderSetting();
|
|
|
- if (!CollectionUtils.isEmpty(orderSettings)) {
|
|
|
- order.setAutoConfirmDay(orderSettings.get(0).getConfirmOvertime());
|
|
|
- }
|
|
|
- //插入order表和order_item表
|
|
|
- if (!this.createIgnore(order)){
|
|
|
+ //根据商品合计、运费、活动优惠、优惠券、积分计算应付金额
|
|
|
+ OmsOrder order = new OmsOrder();
|
|
|
+ order.setNote(orderParam.getNote());
|
|
|
+ order.setDiscountAmount(new BigDecimal(0));
|
|
|
+ order.setTotalAmount(calcTotalAmount(orderItemList));
|
|
|
+ order.setFreightAmount(new BigDecimal(0));
|
|
|
+ order.setPromotionAmount(calcPromotionAmount(orderItemList));
|
|
|
+ order.setPromotionInfo(getOrderPromotionInfo(orderItemList));
|
|
|
+ if (orderParam.getUserCouponId() == null || !flag) {
|
|
|
+ order.setCouponAmount(new BigDecimal(0));
|
|
|
+ } else {
|
|
|
+ order.setCouponId(orderParam.getUserCouponId());
|
|
|
+ order.setCouponAmount(calcCouponAmount(orderItemList));
|
|
|
+ }
|
|
|
+ if (orderParam.getUseIntegration() == null) {
|
|
|
+ order.setIntegration(0);
|
|
|
+ order.setIntegrationAmount(new BigDecimal(0));
|
|
|
+ } else {
|
|
|
+ order.setIntegration(orderParam.getUseIntegration());
|
|
|
+ order.setIntegrationAmount(calcIntegrationAmount(orderItemList));
|
|
|
+ }
|
|
|
+ log.info("订单order:{}", order);
|
|
|
+ order.setPayAmount(calcPayAmount(order));
|
|
|
+ log.info("订单金额amount:{}", order.getPayAmount());
|
|
|
+ //转化为订单信息并插入数据库
|
|
|
+ order.setUserId(userId);
|
|
|
+ order.setCreateTime(new Date());
|
|
|
+ order.setMemberUsername(userId.toString());
|
|
|
+ //支付方式:0->未支付;1->支付宝;2->微信;3->首信易(微信小程序)
|
|
|
+ order.setPayType(orderParam.getPayType());
|
|
|
+ //订单来源:0->PC订单;1->app订单
|
|
|
+ order.setSourceType(1);
|
|
|
+ //订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单
|
|
|
+ order.setStatus(0);
|
|
|
+ //订单类型:0->正常订单;1->秒杀订单
|
|
|
+ order.setOrderType(0);
|
|
|
+ //收货人信息:姓名、电话、邮编、地址
|
|
|
+ UserReceiveAddressDTO address = this.userReceiveAddressService.queryById(orderParam.getUserReceiveAddressId());
|
|
|
+ if (null != address){
|
|
|
+ order.setReceiverName(address.getReceiveName());
|
|
|
+ order.setReceiverPhone(address.getPhone());
|
|
|
+ order.setReceiverPostCode(address.getPostCode());
|
|
|
+ order.setReceiverProvince(address.getProvince());
|
|
|
+ order.setReceiverCity(address.getCity());
|
|
|
+ order.setReceiverRegion(address.getRegion());
|
|
|
+ order.setReceiverDetailAddress(address.getDetailAddress());
|
|
|
+ }
|
|
|
+ //0->未确认;1->已确认
|
|
|
+ order.setConfirmStatus(0);
|
|
|
+ order.setDeleteStatus(0);
|
|
|
+ //计算赠送积分
|
|
|
+ order.setIntegration(calcGifIntegration(orderItemList));
|
|
|
+ //计算赠送成长值
|
|
|
+ order.setGrowth(0);
|
|
|
+ //生成订单号
|
|
|
order.setOrderSn(generateOrderSn(6));
|
|
|
- this.createIgnore(order);
|
|
|
- }
|
|
|
- for (OmsOrderItem orderItem : orderItemList) {
|
|
|
- orderItem.setOrderId(order.getId());
|
|
|
- orderItem.setOrderSn(order.getOrderSn());
|
|
|
- }
|
|
|
- omsOrderItemService.add(orderItemList);
|
|
|
- omsOrderOperateHistoryService.insertOmsOrderOperateHistory(order.getId(), userId, order.getStatus());
|
|
|
- //如使用优惠券更新优惠券使用状态
|
|
|
- if (orderParam.getUserCouponId() != null && flag) {
|
|
|
- updateCouponStatus(orderParam.getUserCouponId(), userId, 1);
|
|
|
- }
|
|
|
- //如使用积分需要扣除积分
|
|
|
+ order.setMerchantId(orderParam.getMerchantId());
|
|
|
+ order.setId(RedisContextHolder.sequence());
|
|
|
+ //设置自动收货天数
|
|
|
+ List<OmsOrderSetting> orderSettings = orderSettingService.listOrderSetting();
|
|
|
+ if (!CollectionUtils.isEmpty(orderSettings)) {
|
|
|
+ order.setAutoConfirmDay(orderSettings.get(0).getConfirmOvertime());
|
|
|
+ }
|
|
|
+ //插入order表和order_item表
|
|
|
+ if (!this.createIgnore(order)){
|
|
|
+ order.setOrderSn(generateOrderSn(6));
|
|
|
+ this.createIgnore(order);
|
|
|
+ }
|
|
|
+ for (OmsOrderItem orderItem : orderItemList) {
|
|
|
+ orderItem.setOrderId(order.getId());
|
|
|
+ orderItem.setOrderSn(order.getOrderSn());
|
|
|
+ }
|
|
|
+ omsOrderItemService.add(orderItemList);
|
|
|
+ omsOrderOperateHistoryService.insertOmsOrderOperateHistory(order.getId(), userId, order.getStatus());
|
|
|
+ //如使用优惠券更新优惠券使用状态
|
|
|
+ if (orderParam.getUserCouponId() != null && flag) {
|
|
|
+ updateCouponStatus(orderParam.getUserCouponId(), userId, 1);
|
|
|
+ }
|
|
|
+ //如使用积分需要扣除积分
|
|
|
// if (orderParam.getUseIntegration() != null) {
|
|
|
// order.setUseIntegration(orderParam.getUseIntegration());
|
|
|
// memberService.updateIntegration(currentMember.getId(), currentMember.getIntegration() - orderParam
|
|
|
// .getUseIntegration());
|
|
|
// }
|
|
|
- //删除购物车中的下单商品
|
|
|
- deleteCartItemList(cartPromotionItemList, userId);
|
|
|
- //发送延迟消息取消订单
|
|
|
- sendDelayMessageCancelOrder(order.getId());
|
|
|
- //调用jsapi支付逻辑
|
|
|
+ //删除购物车中的下单商品
|
|
|
+ deleteCartItemList(cartPromotionItemList, userId);
|
|
|
+ //发送延迟消息取消订单
|
|
|
+ sendDelayMessageCancelOrder(order.getId());
|
|
|
+ //调用jsapi支付逻辑
|
|
|
// WechatPayRequest request = new WechatPayRequest();
|
|
|
// request.setAmount(order.getPayAmount());
|
|
|
// request.setComment("商品购买");
|
|
@@ -317,9 +318,10 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
|
|
|
// throw new ResourceUnavailableException("账号未绑定微信,请联系客服");
|
|
|
// }
|
|
|
// request.setOpenid(openid);
|
|
|
- //WechatPaymentHandler wechatPaymentHandler = applicationContext.getBean(WechatPaymentHandler.class);
|
|
|
- //return this.wechatPaymentHandler.unifiedorder("applet", request);
|
|
|
- return this.onlinePayService.order(order,orderItemList,orderParam);
|
|
|
+ //WechatPaymentHandler wechatPaymentHandler = applicationContext.getBean(WechatPaymentHandler.class);
|
|
|
+ //return this.wechatPaymentHandler.unifiedorder("applet", request);
|
|
|
+ return this.onlinePayService.order(order,orderItemList,orderParam);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|