|  | @@ -5,24 +5,25 @@ import cn.hutool.core.collection.CollUtil;
 | 
	
		
			
				|  |  |  import com.github.pagehelper.PageHelper;
 | 
	
		
			
				|  |  |  import com.hwrj.cloud.common.api.CommonPage;
 | 
	
		
			
				|  |  |  import com.hwrj.cloud.common.exception.Asserts;
 | 
	
		
			
				|  |  | -import com.hwrj.cloud.portal.domain.CartPromotionItem;
 | 
	
		
			
				|  |  | -import com.hwrj.cloud.portal.domain.SmsCouponHistoryDetail;
 | 
	
		
			
				|  |  | -import com.hwrj.cloud.portal.mapper.*;
 | 
	
		
			
				|  |  | -import com.hwrj.cloud.portal.model.*;
 | 
	
		
			
				|  |  |  import com.hwrj.cloud.portal.component.CancelOrderSender;
 | 
	
		
			
				|  |  |  import com.hwrj.cloud.portal.dao.PortalOrderDao;
 | 
	
		
			
				|  |  |  import com.hwrj.cloud.portal.dao.PortalOrderItemDao;
 | 
	
		
			
				|  |  |  import com.hwrj.cloud.portal.domain.*;
 | 
	
		
			
				|  |  | +import com.hwrj.cloud.portal.from.OrderFrom;
 | 
	
		
			
				|  |  | +import com.hwrj.cloud.portal.mapper.*;
 | 
	
		
			
				|  |  | +import com.hwrj.cloud.portal.model.*;
 | 
	
		
			
				|  |  |  import com.hwrj.cloud.portal.service.*;
 | 
	
		
			
				|  |  | -import com.hwrj.cloud.portal.util.OrderJwtTokenUtil;
 | 
	
		
			
				|  |  |  import com.hwrj.cloud.portal.util.MemberUtil;
 | 
	
		
			
				|  |  |  import com.hwrj.cloud.security.service.RedisService;
 | 
	
		
			
				|  |  |  import lombok.extern.slf4j.Slf4j;
 | 
	
		
			
				|  |  | +import org.springframework.beans.BeanUtils;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Value;
 | 
	
		
			
				|  |  |  import org.springframework.data.redis.core.RedisTemplate;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  | +import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  |  import org.springframework.util.CollectionUtils;
 | 
	
		
			
				|  |  | +import org.springframework.util.StringUtils;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import javax.servlet.http.HttpServletRequest;
 | 
	
		
			
				|  |  |  import java.math.BigDecimal;
 | 
	
	
		
			
				|  | @@ -77,8 +78,6 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |      @Value("${redis.member}")
 | 
	
		
			
				|  |  |      private String member;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    @Autowired
 | 
	
		
			
				|  |  | -    private OrderJwtTokenUtil jwtTokenUtil;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private RedisTemplate redisTemplate;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -262,7 +261,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |          if (orderParam.getUseIntegration() != null) {
 | 
	
		
			
				|  |  |              order.setUseIntegration(orderParam.getUseIntegration());
 | 
	
		
			
				|  |  |              UmsMember member = memberService.getById(currentMember.getId());
 | 
	
		
			
				|  |  | -            memberService.updateIntegration(currentMember.getId(), member.getIntegration() -orderParam.getUseIntegration()-orderParam.getUseIntegration());
 | 
	
		
			
				|  |  | +            memberService.updateIntegration(currentMember.getId(), member.getIntegration() - orderParam.getUseIntegration() - orderParam.getUseIntegration());
 | 
	
		
			
				|  |  |  //            memberFeign.updateIntegration(currentMember.getId(), -orderParam.getUseIntegration());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          //删除购物车中的下单商品
 | 
	
	
		
			
				|  | @@ -381,7 +380,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |              status = null;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          // redis 中用户信息
 | 
	
		
			
				|  |  | -        UmsMember member = memberUtil.getRedisUmsMember(request);
 | 
	
		
			
				|  |  | +        UmsMember member = memberService.getCurrentMember();
 | 
	
		
			
				|  |  |          PageHelper.startPage(pageNum, pageSize);
 | 
	
		
			
				|  |  |          OmsOrderExample orderExample = new OmsOrderExample();
 | 
	
		
			
				|  |  |          OmsOrderExample.Criteria criteria = orderExample.createCriteria();
 | 
	
	
		
			
				|  | @@ -447,11 +446,275 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private PmsProductMapper pmsProductMapper;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Transactional
 | 
	
		
			
				|  |  | +    public Map<String, Object> save(OrderFrom orderFrom) {
 | 
	
		
			
				|  |  | +        PmsProduct pmsProduct = pmsProductMapper.selectByPrimaryKey(orderFrom.getProductId());
 | 
	
		
			
				|  |  | +        //新增购物车
 | 
	
		
			
				|  |  | +        OmsCartItem cartItem = new OmsCartItem();
 | 
	
		
			
				|  |  | +        //构建订单数据
 | 
	
		
			
				|  |  | +        OrderParam orderParam = getOrderParam(orderFrom, pmsProduct, cartItem);
 | 
	
		
			
				|  |  | +        //下单
 | 
	
		
			
				|  |  | +        return saveOrder(orderParam, orderFrom);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private OrderParam getOrderParam(OrderFrom orderFrom, PmsProduct pmsProduct, OmsCartItem cartItem) {
 | 
	
		
			
				|  |  | +        BeanUtils.copyProperties(pmsProduct, cartItem);
 | 
	
		
			
				|  |  | +        UmsMember currentMember = memberService.getCurrentMember();
 | 
	
		
			
				|  |  | +        cartItem.setId(null);
 | 
	
		
			
				|  |  | +        cartItem.setProductName(pmsProduct.getName());
 | 
	
		
			
				|  |  | +        //设置品牌
 | 
	
		
			
				|  |  | +        cartItem.setProductBrand(pmsProduct.getBrandName());
 | 
	
		
			
				|  |  | +        //产品首图
 | 
	
		
			
				|  |  | +        cartItem.setProductPic(pmsProduct.getPic());
 | 
	
		
			
				|  |  | +        //购买数量
 | 
	
		
			
				|  |  | +        cartItem.setQuantity(orderFrom.getBayNum());
 | 
	
		
			
				|  |  | +        cartItem.setMemberId(currentMember.getId());
 | 
	
		
			
				|  |  | +        cartItem.setMemberNickname(currentMember.getNickname());
 | 
	
		
			
				|  |  | +        cartItem.setProductId(orderFrom.getProductId());
 | 
	
		
			
				|  |  | +        //先添加到购物车
 | 
	
		
			
				|  |  | +        cartSave(cartItem);
 | 
	
		
			
				|  |  | +        OrderParam orderParam = new OrderParam();
 | 
	
		
			
				|  |  | +        orderParam.setCartIds(Arrays.asList(cartItem.getId()));
 | 
	
		
			
				|  |  | +        //设置收获地址
 | 
	
		
			
				|  |  | +        orderParam.setMemberReceiveAddressId(orderFrom.getMemberReceiveAddressId());
 | 
	
		
			
				|  |  | +        //未支付
 | 
	
		
			
				|  |  | +        orderParam.setPayType(0);
 | 
	
		
			
				|  |  | +        return orderParam;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private OmsPromotionService promotionService;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private List<OmsCartItem> list(Long memberId) {
 | 
	
		
			
				|  |  | +        OmsCartItemExample example = new OmsCartItemExample();
 | 
	
		
			
				|  |  | +        example.createCriteria().andDeleteStatusEqualTo(0).andMemberIdEqualTo(memberId);
 | 
	
		
			
				|  |  | +        return cartItemMapper.selectByExample(example);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private List<CartPromotionItem> listPromotion(Long memberId, List<Long> cartIds) {
 | 
	
		
			
				|  |  | +        List<OmsCartItem> cartItemList = list(memberId);
 | 
	
		
			
				|  |  | +        if (CollUtil.isNotEmpty(cartIds)) {
 | 
	
		
			
				|  |  | +            cartItemList = cartItemList.stream().filter(item -> cartIds.contains(item.getId())).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        List<CartPromotionItem> cartPromotionItemList = new ArrayList<>();
 | 
	
		
			
				|  |  | +        if (!CollectionUtils.isEmpty(cartItemList)) {
 | 
	
		
			
				|  |  | +            cartPromotionItemList = promotionService.calcCartPromotionByOne(cartItemList);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return cartPromotionItemList;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  | -    public void save(List<Long> cartIds) {
 | 
	
		
			
				|  |  | +    public Map<String, Object> saveOrder(OrderParam orderParam, OrderFrom orderFrom) {
 | 
	
		
			
				|  |  | +        List<OmsOrderItem> orderItemList = new ArrayList<>();
 | 
	
		
			
				|  |  | +        //获取购物车及优惠信息  redis
 | 
	
		
			
				|  |  | +        UmsMember currentMember = memberService.getCurrentMember();
 | 
	
		
			
				|  |  | +        //获取购物车信息
 | 
	
		
			
				|  |  | +        List<CartPromotionItem> cartPromotionItemList = getCartPromotionItems(orderParam, orderItemList, currentMember);
 | 
	
		
			
				|  |  | +        //扣除积分
 | 
	
		
			
				|  |  | +        deduction(orderParam, orderItemList, currentMember, cartPromotionItemList);
 | 
	
		
			
				|  |  | +        //计算order_item的实付金额
 | 
	
		
			
				|  |  | +        handleRealAmount(orderItemList);
 | 
	
		
			
				|  |  | +        //进行库存锁定
 | 
	
		
			
				|  |  | +        lockStockByOne(cartPromotionItemList, orderFrom);
 | 
	
		
			
				|  |  | +        //插入大订单
 | 
	
		
			
				|  |  | +        OmsOrder order = new OmsOrder();
 | 
	
		
			
				|  |  | +        insertOmsOrder(orderParam, order, orderItemList, currentMember);
 | 
	
		
			
				|  |  | +        //插入小定单
 | 
	
		
			
				|  |  | +        insertOderItem(orderItemList, order);
 | 
	
		
			
				|  |  | +        //如使用优惠券更新优惠券使用状态
 | 
	
		
			
				|  |  | +        updateCoupon(orderParam, currentMember, order);
 | 
	
		
			
				|  |  | +        //删除购物车中的下单商品
 | 
	
		
			
				|  |  | +        deleteCartItemList(cartPromotionItemList, currentMember);
 | 
	
		
			
				|  |  | +        //发送延迟消息取消订单
 | 
	
		
			
				|  |  | +        sendDelayMessageCancelOrder(order.getId());
 | 
	
		
			
				|  |  | +        Map<String, Object> result = new HashMap<>();
 | 
	
		
			
				|  |  | +        result.put("order", order);
 | 
	
		
			
				|  |  | +        result.put("orderItemList", orderItemList);
 | 
	
		
			
				|  |  | +        return result;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private void updateCoupon(OrderParam orderParam, UmsMember currentMember, OmsOrder order) {
 | 
	
		
			
				|  |  | +        if (orderParam.getCouponId() != null) {
 | 
	
		
			
				|  |  | +            couponService.updateCouponStatus(orderParam.getCouponId(), currentMember.getId(), 1);
 | 
	
		
			
				|  |  | +//            couponFeign.updateCouponStatus(orderParam.getCouponId(), currentMember.getId(), 1);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //如使用积分需要扣除积分
 | 
	
		
			
				|  |  | +        if (orderParam.getUseIntegration() != null) {
 | 
	
		
			
				|  |  | +            order.setUseIntegration(orderParam.getUseIntegration());
 | 
	
		
			
				|  |  | +            UmsMember member = memberService.getById(currentMember.getId());
 | 
	
		
			
				|  |  | +            memberService.updateIntegration(currentMember.getId(), member.getIntegration() - orderParam.getUseIntegration() - orderParam.getUseIntegration());
 | 
	
		
			
				|  |  | +//            memberFeign.updateIntegration(currentMember.getId(), -orderParam.getUseIntegration());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private void insertOderItem(List<OmsOrderItem> orderItemList, OmsOrder order) {
 | 
	
		
			
				|  |  | +        for (OmsOrderItem orderItem : orderItemList) {
 | 
	
		
			
				|  |  | +            orderItem.setOrderId(order.getId());
 | 
	
		
			
				|  |  | +            orderItem.setOrderSn(order.getOrderSn());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        orderItemDao.insertList(orderItemList);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private OmsOrder insertOmsOrder(OrderParam orderParam, OmsOrder order, List<OmsOrderItem> orderItemList, UmsMember currentMember) {
 | 
	
		
			
				|  |  | +        //根据商品合计、运费、活动优惠、优惠券、积分计算应付金额
 | 
	
		
			
				|  |  | +        order.setDiscountAmount(new BigDecimal(0));
 | 
	
		
			
				|  |  | +        order.setTotalAmount(calcTotalAmount(orderItemList));
 | 
	
		
			
				|  |  | +        order.setFreightAmount(new BigDecimal(0));
 | 
	
		
			
				|  |  | +        order.setPromotionAmount(calcPromotionAmount(orderItemList));
 | 
	
		
			
				|  |  | +        order.setPromotionInfo(getOrderPromotionInfo(orderItemList));
 | 
	
		
			
				|  |  | +        if (orderParam.getCouponId() == null) {
 | 
	
		
			
				|  |  | +            order.setCouponAmount(new BigDecimal(0));
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            order.setCouponId(orderParam.getCouponId());
 | 
	
		
			
				|  |  | +            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));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        order.setPayAmount(calcPayAmount(order));
 | 
	
		
			
				|  |  | +        //转化为订单信息并插入数据库
 | 
	
		
			
				|  |  | +        order.setMemberId(currentMember.getId());
 | 
	
		
			
				|  |  | +        order.setCreateTime(new Date());
 | 
	
		
			
				|  |  | +        order.setMemberUsername(currentMember.getNickname());
 | 
	
		
			
				|  |  | +        //支付方式:0->未支付;1->支付宝;2->微信
 | 
	
		
			
				|  |  | +        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);
 | 
	
		
			
				|  |  | +        //收货人信息:姓名、电话、邮编、地址
 | 
	
		
			
				|  |  | +        UmsMemberReceiveAddress address = memberReceiveAddressService.getItem(orderParam.getMemberReceiveAddressId());
 | 
	
		
			
				|  |  | +        order.setReceiverName(address.getName());
 | 
	
		
			
				|  |  | +        order.setReceiverPhone(address.getPhoneNumber());
 | 
	
		
			
				|  |  | +        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(calcGiftGrowth(orderItemList));
 | 
	
		
			
				|  |  | +        //生成订单号
 | 
	
		
			
				|  |  | +        order.setOrderSn(generateOrderSn(order));
 | 
	
		
			
				|  |  | +        //设置自动收货天数
 | 
	
		
			
				|  |  | +        List<OmsOrderSetting> orderSettings = orderSettingMapper.selectByExample(new OmsOrderSettingExample());
 | 
	
		
			
				|  |  | +        if (CollUtil.isNotEmpty(orderSettings)) {
 | 
	
		
			
				|  |  | +            order.setAutoConfirmDay(orderSettings.get(0).getConfirmOvertime());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        // TODO: 2018/9/3 bill_*,delivery_*
 | 
	
		
			
				|  |  | +        //插入order表和order_item表
 | 
	
		
			
				|  |  | +        orderMapper.insert(order);
 | 
	
		
			
				|  |  | +        return order;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private void deduction(OrderParam orderParam, List<OmsOrderItem> orderItemList, UmsMember currentMember, List<CartPromotionItem> cartPromotionItemList) {
 | 
	
		
			
				|  |  | +        //判断使用使用了优惠券
 | 
	
		
			
				|  |  | +        if (orderParam.getCouponId() == null) {
 | 
	
		
			
				|  |  | +            //不用优惠券
 | 
	
		
			
				|  |  | +            for (OmsOrderItem orderItem : orderItemList) {
 | 
	
		
			
				|  |  | +                orderItem.setCouponAmount(new BigDecimal(0));
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            //使用优惠券
 | 
	
		
			
				|  |  | +            SmsCouponHistoryDetail couponHistoryDetail = getUseCoupon(cartPromotionItemList, orderParam.getCouponId());
 | 
	
		
			
				|  |  | +            if (couponHistoryDetail == null) {
 | 
	
		
			
				|  |  | +                Asserts.fail("该优惠券不可用");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            //对下单商品的优惠券进行处理
 | 
	
		
			
				|  |  | +            handleCouponAmount(orderItemList, couponHistoryDetail);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //判断是否使用积分
 | 
	
		
			
				|  |  | +        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.fail("积分不可用");
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                //可用情况下分摊到可用商品中
 | 
	
		
			
				|  |  | +                for (OmsOrderItem orderItem : orderItemList) {
 | 
	
		
			
				|  |  | +                    BigDecimal perAmount = orderItem.getProductPrice().divide(totalAmount, 3, RoundingMode.HALF_EVEN).multiply(integrationAmount);
 | 
	
		
			
				|  |  | +                    orderItem.setIntegrationAmount(perAmount);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private List<CartPromotionItem> getCartPromotionItems(OrderParam orderParam, List<OmsOrderItem> orderItemList, UmsMember currentMember) {
 | 
	
		
			
				|  |  | +        List<CartPromotionItem> cartPromotionItemList = listPromotion(currentMember.getId(), orderParam.getCartIds());
 | 
	
		
			
				|  |  | +        for (CartPromotionItem cartPromotionItem : cartPromotionItemList) {
 | 
	
		
			
				|  |  | +            //生成下单商品信息
 | 
	
		
			
				|  |  | +            OmsOrderItem orderItem = new OmsOrderItem();
 | 
	
		
			
				|  |  | +            orderItem.setProductId(cartPromotionItem.getProductId());
 | 
	
		
			
				|  |  | +            orderItem.setProductName(cartPromotionItem.getProductName());
 | 
	
		
			
				|  |  | +            orderItem.setProductPic(cartPromotionItem.getProductPic());
 | 
	
		
			
				|  |  | +            orderItem.setProductAttr(cartPromotionItem.getProductAttr());
 | 
	
		
			
				|  |  | +            orderItem.setProductBrand(cartPromotionItem.getProductBrand());
 | 
	
		
			
				|  |  | +            orderItem.setProductSn(cartPromotionItem.getProductSn());
 | 
	
		
			
				|  |  | +            orderItem.setProductPrice(cartPromotionItem.getPrice());
 | 
	
		
			
				|  |  | +            orderItem.setProductQuantity(cartPromotionItem.getQuantity());
 | 
	
		
			
				|  |  | +            orderItem.setProductSkuId(cartPromotionItem.getProductSkuId());
 | 
	
		
			
				|  |  | +            orderItem.setProductSkuCode(cartPromotionItem.getProductSkuCode());
 | 
	
		
			
				|  |  | +            orderItem.setProductCategoryId(cartPromotionItem.getProductCategoryId());
 | 
	
		
			
				|  |  | +            orderItem.setPromotionAmount(cartPromotionItem.getReduceAmount());
 | 
	
		
			
				|  |  | +            orderItem.setPromotionName(cartPromotionItem.getPromotionMessage());
 | 
	
		
			
				|  |  | +            orderItem.setGiftIntegration(cartPromotionItem.getIntegration());
 | 
	
		
			
				|  |  | +            orderItem.setGiftGrowth(cartPromotionItem.getGrowth());
 | 
	
		
			
				|  |  | +            orderItemList.add(orderItem);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return cartPromotionItemList;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 对没满足优惠条件的商品进行处理
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private void handleNoReduce(List<CartPromotionItem> cartPromotionItemList, List<OmsCartItem> itemList, PromotionProduct promotionProduct) {
 | 
	
		
			
				|  |  | +        for (OmsCartItem item : itemList) {
 | 
	
		
			
				|  |  | +            CartPromotionItem cartPromotionItem = new CartPromotionItem();
 | 
	
		
			
				|  |  | +            BeanUtils.copyProperties(item, cartPromotionItem);
 | 
	
		
			
				|  |  | +            cartPromotionItem.setPromotionMessage("无优惠");
 | 
	
		
			
				|  |  | +            cartPromotionItem.setReduceAmount(new BigDecimal(0));
 | 
	
		
			
				|  |  | +            cartPromotionItem.setRealStock(promotionProduct.getStock() - promotionProduct.getLowStock());
 | 
	
		
			
				|  |  | +            cartPromotionItem.setIntegration(promotionProduct.getGiftPoint());
 | 
	
		
			
				|  |  | +            cartPromotionItem.setGrowth(promotionProduct.getGiftGrowth());
 | 
	
		
			
				|  |  | +            cartPromotionItemList.add(cartPromotionItem);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private OmsCartItemMapper cartItemMapper;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    private int cartSave(OmsCartItem cartItem) {
 | 
	
		
			
				|  |  | +        int count;
 | 
	
		
			
				|  |  | +        UmsMember currentMember = memberService.getCurrentMember();
 | 
	
		
			
				|  |  | +        cartItem.setMemberId(currentMember.getId());
 | 
	
		
			
				|  |  | +        cartItem.setMemberNickname(currentMember.getNickname());
 | 
	
		
			
				|  |  | +        cartItem.setDeleteStatus(0);
 | 
	
		
			
				|  |  | +        cartItem.setCreateDate(new Date());
 | 
	
		
			
				|  |  | +        count = cartItemMapper.insert(cartItem);
 | 
	
		
			
				|  |  | +        return count;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 生成18位订单编号:8位日期+2位平台号码+2位支付方式+6位以上自增id
 | 
	
		
			
				|  |  |       */
 | 
	
	
		
			
				|  | @@ -701,7 +964,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |       * @param couponId              使用优惠券id
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  |      private SmsCouponHistoryDetail getUseCoupon(List<CartPromotionItem> cartPromotionItemList, Long couponId) {
 | 
	
		
			
				|  |  | -        List<SmsCouponHistoryDetail> couponHistoryDetailList = couponService.listCart(cartPromotionItemList,  memberUtil.getRedisUmsMember(request).getId(),1);
 | 
	
		
			
				|  |  | +        List<SmsCouponHistoryDetail> couponHistoryDetailList = couponService.listCart(cartPromotionItemList, memberUtil.getRedisUmsMember(request).getId(), 1);
 | 
	
		
			
				|  |  |          for (SmsCouponHistoryDetail couponHistoryDetail : couponHistoryDetailList) {
 | 
	
		
			
				|  |  |              if (couponHistoryDetail.getCoupon().getId().equals(couponId)) {
 | 
	
		
			
				|  |  |                  return couponHistoryDetail;
 | 
	
	
		
			
				|  | @@ -731,6 +994,24 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 锁定下单商品的所有库存
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private void lockStockByOne(List<CartPromotionItem> cartPromotionItemList, OrderFrom orderFrom) {
 | 
	
		
			
				|  |  | +        for (CartPromotionItem cartPromotionItem : cartPromotionItemList) {
 | 
	
		
			
				|  |  | +            PmsProduct record = new PmsProduct();
 | 
	
		
			
				|  |  | +            PmsProduct pmsProduct = pmsProductMapper.selectByPrimaryKey(cartPromotionItem.getProductId());
 | 
	
		
			
				|  |  | +            Integer stock = pmsProduct.getStock();
 | 
	
		
			
				|  |  | +            Integer bayNum = orderFrom.getBayNum();
 | 
	
		
			
				|  |  | +            if (stock.intValue() < bayNum.intValue()) {
 | 
	
		
			
				|  |  | +                Asserts.fail("库存不足,无法下单");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            pmsProduct.setStock(stock - bayNum);
 | 
	
		
			
				|  |  | +            pmsProductMapper.updateByPrimaryKey(record);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 判断下单商品是否都有库存
 | 
	
		
			
				|  |  |       */
 |