|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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("请先申请成为代理人"); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new FebsException("购买商品或sku不存在"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if("样品".equals(sku.getSample())){ | 
|---|
|  |  |  | List<MallOrderItem> items = mallOrderItemMapper.selectItemBySkuIdUnCancel(sku.getId(), member.getId()); | 
|---|
|  |  |  | if (CollUtil.isNotEmpty(items)) { | 
|---|
|  |  |  | throw new FebsException("样品一个用户只能购买一次"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Integer cnt = item.getCnt(); | 
|---|
|  |  |  | if(1 < cnt){ | 
|---|
|  |  |  | throw new FebsException("样品只能购买一件"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //                    if("样品".equals(sku.getSample())){ | 
|---|
|  |  |  | //                        List<MallOrderItem> items = mallOrderItemMapper.selectItemBySkuIdUnCancel(sku.getId(), member.getId()); | 
|---|
|  |  |  | //                        if (CollUtil.isNotEmpty(items)) { | 
|---|
|  |  |  | //                            throw new FebsException("样品一个用户只能购买一次"); | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  | //                        Integer cnt = item.getCnt(); | 
|---|
|  |  |  | //                        if(1 < cnt){ | 
|---|
|  |  |  | //                            throw new FebsException("样品只能购买一件"); | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (sku.getStock() < item.getCnt()) { | 
|---|
|  |  |  | throw new FebsException(sku.getSkuName() + "库存不足"); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 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()); | 
|---|
|  |  |  | 
|---|
|  |  |  | orderInfo.setLatitude(address.getLatitude()); | 
|---|
|  |  |  | orderInfo.setLongitude(address.getLongitude()); | 
|---|
|  |  |  | this.baseMapper.updateById(orderInfo); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(), 15 * 60 * 1000L); | 
|---|
|  |  |  | //过期时间修改成24小时 | 
|---|
|  |  |  | agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(),  24 * 60 * 60 * 1000L); | 
|---|
|  |  |  | return orderInfo.getId(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | 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("余额不足"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | OrderDetailVo orderDetailVo = MallOrderInfoConversion.INSTANCE.entityToDetailVo(orderInfo); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        if (orderInfo.getStatus() == OrderStatusEnum.WAIT_FINISH.getValue()) { | 
|---|
|  |  |  | //            MallExpressInfo expressInfo = expressInfoMapper.selectByOrderId(orderInfo.getId()); | 
|---|
|  |  |  | //            orderDetailVo.setExpressNo(expressInfo.getExpressNo()); | 
|---|
|  |  |  | //            orderDetailVo.setExpressCom(expressInfo.getExpressCom()); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | MallExpressInfo expressInfo = expressInfoMapper.selectByOrderId(orderInfo.getId()); | 
|---|
|  |  |  | if(ObjectUtil.isNotEmpty(expressInfo)){ | 
|---|
|  |  |  | orderDetailVo.setExpressNo(expressInfo.getExpressNo()); | 
|---|
|  |  |  | orderDetailVo.setExpressCom(expressInfo.getExpressCom()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (orderInfo.getStatus() == OrderStatusEnum.REFUNDING.getValue() || orderInfo.getStatus() == OrderStatusEnum.REFUNDED.getValue()) { | 
|---|
|  |  |  | MallOrderRefund orderRefund = mallOrderRefundMapper.selectOrderRefundByOrderId(orderInfo.getId()); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (OrderStatusEnum.WAIT_PAY.getValue() == orderInfo.getStatus()) { | 
|---|
|  |  |  | Date endTime = DateUtil.offsetMinute(orderInfo.getOrderTime(), 15); | 
|---|
|  |  |  | Date endTime = DateUtil.offsetMinute(orderInfo.getOrderTime(), 1440); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | long remainTime = DateUtil.between(new Date(), endTime, DateUnit.SECOND, false); | 
|---|
|  |  |  | orderDetailVo.setRemainTime(remainTime); | 
|---|
|  |  |  | 
|---|
|  |  |  | if (sku == null) { | 
|---|
|  |  |  | return new FebsResponse().fail().message("购买商品或sku不存在"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if("样品".equals(sku.getSample())){ | 
|---|
|  |  |  | List<MallOrderItem> mallOrderItems = mallOrderItemMapper.selectItemBySkuIdUnCancel(sku.getId(), member.getId()); | 
|---|
|  |  |  | if (CollUtil.isNotEmpty(mallOrderItems)) { | 
|---|
|  |  |  | return new FebsResponse().fail().message("样品只能购买一次"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Integer cnt = item.getCnt(); | 
|---|
|  |  |  | if(1 < cnt){ | 
|---|
|  |  |  | return new FebsResponse().fail().message("样品只能购买一件"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | //验证用户的等级 | 
|---|
|  |  |  | if(AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())){ | 
|---|
|  |  |  | return new FebsResponse().fail().message("请先申请成为代理人"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //            if("样品".equals(sku.getSample())){ | 
|---|
|  |  |  | //                List<MallOrderItem> mallOrderItems = mallOrderItemMapper.selectItemBySkuIdUnCancel(sku.getId(), member.getId()); | 
|---|
|  |  |  | //                if (CollUtil.isNotEmpty(mallOrderItems)) { | 
|---|
|  |  |  | //                    return new FebsResponse().fail().message("样品只能购买一次"); | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //                Integer cnt = item.getCnt(); | 
|---|
|  |  |  | //                if(1 < cnt){ | 
|---|
|  |  |  | //                    return new FebsResponse().fail().message("样品只能购买一件"); | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            }else{ | 
|---|
|  |  |  | //                //验证用户的等级 | 
|---|
|  |  |  | //                if(AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())){ | 
|---|
|  |  |  | //                    return new FebsResponse().fail().message("请先申请成为合伙人"); | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (sku.getStock() < item.getCnt()) { | 
|---|
|  |  |  | return new FebsResponse().fail().message(sku.getSkuName() + "库存不足"); | 
|---|