|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.math.BigDecimal; | 
|---|
|  |  |  | import java.util.*; | 
|---|
|  |  |  | import java.util.stream.Collectors; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * @author wzy | 
|---|
|  |  |  | 
|---|
|  |  |  | private final IApiMallTeamLeaderService iApiMallTeamLeaderService; | 
|---|
|  |  |  | private final IMallElectronicFenceService iMallElectronicFenceService; | 
|---|
|  |  |  | private final MallElectronicFenceMapper mallElectronicFenceMapper; | 
|---|
|  |  |  | private final MallMemberCouponMapper mallMemberCouponMapper; | 
|---|
|  |  |  | private final MallGoodsCouponMapper mallGoodsCouponMapper; | 
|---|
|  |  |  | private final CouponGoodsMapper couponGoodsMapper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional(rollbackFor = Exception.class) | 
|---|
|  |  |  | public Long createOrder(AddOrderDto addOrderDto) { | 
|---|
|  |  |  | MallMember member = LoginUserUtil.getLoginUser(); | 
|---|
|  |  |  | //验证用户的等级 | 
|---|
|  |  |  | Long memberId = LoginUserUtil.getLoginUser().getId(); | 
|---|
|  |  |  | MallMember member = mallMemberMapper.selectById(memberId); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //验证用户的等级 | 
|---|
|  |  |  | //        if(AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())){ | 
|---|
|  |  |  | //            throw new FebsException("请先申请成为代理人"); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | 
|---|
|  |  |  | if(1 != goodsResult){ | 
|---|
|  |  |  | throw new FebsException(mallGoods.getGoodsName() + "库存不足"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BigDecimal amount = BigDecimal.ZERO; | 
|---|
|  |  |  | if(AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())){ | 
|---|
|  |  |  | //普通用户使用原价购买 | 
|---|
|  |  |  | amount = sku.getOriginalPrice().multiply(BigDecimal.valueOf(item.getCnt())); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | //合伙人使用折扣价 | 
|---|
|  |  |  | amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt())); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt())); | 
|---|
|  |  |  | //是否使用优惠卷 | 
|---|
|  |  |  | if(ObjectUtil.isNotEmpty(addOrderDto.getMemberCouponId())){ | 
|---|
|  |  |  | Long memberCouponId = addOrderDto.getMemberCouponId(); | 
|---|
|  |  |  | MallMemberCoupon mallMemberCoupon = mallMemberCouponMapper.selectById(memberCouponId); | 
|---|
|  |  |  | if(ObjectUtil.isEmpty(mallMemberCoupon)){ | 
|---|
|  |  |  | throw new FebsException(mallMemberCoupon.getCouponName()+"无法使用"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Integer state = mallMemberCoupon.getState(); | 
|---|
|  |  |  | if(1 != state){ | 
|---|
|  |  |  | throw new FebsException(mallMemberCoupon.getCouponName()+"无法使用"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //卷是否和商品绑定 | 
|---|
|  |  |  | Long skuGoodsId = sku.getGoodsId(); | 
|---|
|  |  |  | Long couponId = mallMemberCoupon.getCouponId(); | 
|---|
|  |  |  | List<CouponGoods> couponGoods = couponGoodsMapper.selectByGoodIdAndCouponId(skuGoodsId, couponId); | 
|---|
|  |  |  | if(ObjectUtil.isEmpty(couponGoods)){ | 
|---|
|  |  |  | throw new FebsException(sku.getGoodsName()+"无法使用"+mallMemberCoupon.getCouponName()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //                        Long goodsId = mallMemberCoupon.getGoodsId(); | 
|---|
|  |  |  | //                        if(goodsId != sku.getGoodsId()){ | 
|---|
|  |  |  | //                            throw new FebsException(sku.getGoodsName()+"无法使用"+mallMemberCoupon.getCouponName()); | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  | MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(mallMemberCoupon.getCouponId()); | 
|---|
|  |  |  | if(ObjectUtil.isEmpty(mallGoodsCoupon)){ | 
|---|
|  |  |  | throw new FebsException(mallGoodsCoupon.getName()+"无法使用"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Integer stateCoupon = mallGoodsCoupon.getState(); | 
|---|
|  |  |  | if(2 != stateCoupon){ | 
|---|
|  |  |  | throw new FebsException(mallGoodsCoupon.getName()+"无法使用"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BigDecimal costAmount = mallGoodsCoupon.getCostAmount(); | 
|---|
|  |  |  | BigDecimal realAmount = mallGoodsCoupon.getRealAmount(); | 
|---|
|  |  |  | if(amount.compareTo(costAmount) >= 0){ | 
|---|
|  |  |  | amount = (amount.subtract(realAmount).compareTo(BigDecimal.ZERO) > 0 ? amount.subtract(realAmount) : BigDecimal.ZERO); | 
|---|
|  |  |  | orderItem.setMemberCouponId(memberCouponId); | 
|---|
|  |  |  | mallMemberCoupon.setState(2); | 
|---|
|  |  |  | mallMemberCouponMapper.updateById(mallMemberCoupon); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //                    BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt())); | 
|---|
|  |  |  | orderItem.setAmount(amount); | 
|---|
|  |  |  | orderItem.setCnt(item.getCnt()); | 
|---|
|  |  |  | orderItem.setOrderId(orderInfo.getId()); | 
|---|
|  |  |  | 
|---|
|  |  |  | orderItem.setGoodsName(sku.getGoodsName()); | 
|---|
|  |  |  | orderItem.setSkuId(sku.getId()); | 
|---|
|  |  |  | orderItem.setState(1); | 
|---|
|  |  |  | if(ObjectUtil.isNotEmpty(member.getReferrerId())){ | 
|---|
|  |  |  | orderItem.setMemberInviteId(member.getReferrerId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(ObjectUtil.isNotEmpty(addOrderDto.getMemberInviteId())){ | 
|---|
|  |  |  | orderItem.setMemberInviteId(addOrderDto.getMemberInviteId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | orderItem.setStyleName(sku.getStyleName()); | 
|---|
|  |  |  | orderItem.setSkuName(sku.getSkuName()); | 
|---|
|  |  |  | orderItem.setSkuImage(sku.getSkuImage()); | 
|---|
|  |  |  | 
|---|
|  |  |  | Integer skuResult = mallGoodsSkuMapper.updateStockAndVolumeBySkuId(sku.getId(),mallOrderItem.getCnt()); | 
|---|
|  |  |  | if(1 != skuResult){ | 
|---|
|  |  |  | throw new FebsException(sku.getSkuName() + "库存不足"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Long memberCouponId = mallOrderItem.getMemberCouponId(); | 
|---|
|  |  |  | MallMemberCoupon mallMemberCoupon = mallMemberCouponMapper.selectById(memberCouponId); | 
|---|
|  |  |  | if(ObjectUtil.isNotEmpty(mallMemberCoupon)){ | 
|---|
|  |  |  | mallMemberCoupon.setState(1); | 
|---|
|  |  |  | mallMemberCouponMapper.updateById(mallMemberCoupon); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | orderInfo.setPayResult("1"); | 
|---|
|  |  |  | orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue()); | 
|---|
|  |  |  | mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | agentProducer.sendOrderCoupon(orderInfo.getId()); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case "4": | 
|---|
|  |  |  | if (orderInfo.getOrderType() != 2) { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | this.baseMapper.updateById(orderInfo); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        OrderStateDto orderStateDto = new OrderStateDto(); | 
|---|
|  |  |  | //        orderStateDto.setOrderNo(orderInfo.getOrderNo()); | 
|---|
|  |  |  | //        String productNames = getProductNames(orderInfo.getMemberId(), orderInfo.getId()); | 
|---|
|  |  |  | //        orderStateDto.setGoodsName(StrUtil.isEmpty(productNames)?"商品":productNames); | 
|---|
|  |  |  | //        orderStateDto.setOrderState("已送达自提点"); | 
|---|
|  |  |  | //        orderStateDto.setTakeCode(orderInfo.getTakeCode()); | 
|---|
|  |  |  | //        String takeUniqueCode = orderInfo.getTakeUniqueCode(); | 
|---|
|  |  |  | //        MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(takeUniqueCode); | 
|---|
|  |  |  | //        orderStateDto.setAddressArea(mallTeamLeader.getAddressArea()); | 
|---|
|  |  |  | //        orderStateDto.setOpenId(mallMemberMapper.selectById(orderInfo.getMemberId()).getOpenId()); | 
|---|
|  |  |  | //        DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.WX_TEMPLATE_ID_ONE.getType(), DataDictionaryEnum.WX_TEMPLATE_ID_ONE.getCode()); | 
|---|
|  |  |  | //        orderStateDto.setTemplateId(dataDictionaryCustom.getValue()); | 
|---|
|  |  |  | ////            iXcxPayService.pushOrderToAddress(orderStateDto); | 
|---|
|  |  |  | //        iXcxPayService.uniformMessageSend(orderStateDto); | 
|---|
|  |  |  | Map<String, Object> map = new HashMap<>(); | 
|---|
|  |  |  | map.put("orderInfo", payResultStr); | 
|---|
|  |  |  | map.put("orderNo", orderInfo.getOrderNo()); | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new FebsException("支付密码错误"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int reduce = memberWalletService.reduce(orderInfo.getAmount().add(orderInfo.getCarriage()), mallMember.getId(), field); | 
|---|
|  |  |  | int reduce = memberWalletService.reduce(orderInfo.getAmount(), mallMember.getId(), field); | 
|---|
|  |  |  | if (reduce == 2) { | 
|---|
|  |  |  | throw new FebsException("余额不足"); | 
|---|
|  |  |  | } | 
|---|