doum
10 小时以前 0a206f3acb9af0ec9db650861d34a256cda1c960
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -727,6 +727,8 @@
        goodsorder.setMemberId(member.getId());
        goodsorder.setType(Constants.ZERO);
        goodsorder.setStatus(Constants.ZERO);
        goodsorder.setReceiveType(orderPayRequest.getReceiveType());
        goodsorder.setCouponPrice(BigDecimal.ZERO);
        Shop shop = null;
        if(Constants.equalsInteger(orderPayRequest.getReceiveType(),Constants.ZERO)){
            //查询收货地址
@@ -782,6 +784,7 @@
        payConfirmRequest.setAddressId(orderPayRequest.getAddressId());
        payConfirmRequest.setMemberId(member.getId());
        payConfirmRequest.setCouponId(orderPayRequest.getCouponId());
        payConfirmRequest.setUseIntegral(orderPayRequest.getUseIntegral());
        //通过支付确认接口获取生成支付信息
        OrderPayConfirmResponse orderPayConfirmResponse = this.orderPayConfirm(payConfirmRequest,memberCouponService);
        if(Objects.isNull(orderPayConfirmResponse)){
@@ -793,6 +796,7 @@
        goodsorder.setIntegral(orderPayConfirmResponse.getIntegralAmount());
        goodsorder.setMailPrice(orderPayConfirmResponse.getMailAmount());
        goodsorder.setPayMethod(goodsorder.getPrice().compareTo(BigDecimal.ZERO)>Constants.ZERO?Constants.ZERO:Constants.ONE);
        goodsorder.setGoodsNum(orderPayRequest.getPayDetailRequestList().stream().mapToInt(PayDetailRequest::getGoodsNum).sum());
        if(Objects.nonNull(orderPayConfirmResponse.getMemberCoupon())){
            sumPrice = sumPrice.subtract(orderPayConfirmResponse.getMemberCoupon().getPrice());
            goodsorder.setCouponId(orderPayConfirmResponse.getMemberCoupon().getId());
@@ -811,6 +815,7 @@
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"无明细数据,请检查选择数据!");
        }
        List<GoodsorderDetail> goodsOrderDetailList = new ArrayList<>();
        BigDecimal shopSettlement = BigDecimal.ZERO;
        for (OrderGoodsCalculateResponse payDetailRequest:goodsCalculateList) {
            //查询商品
            GoodsSku goodsSku = goodsSkuMapper.selectById(payDetailRequest.getSkuId());
@@ -843,6 +848,7 @@
            goodsOrderDetail.setCouponDeduct(payDetailRequest.getCouponDeductCash());
            goodsOrderDetail.setIntegralDeduct(payDetailRequest.getIntegralDeductCash());
            goodsOrderDetail.setOrderId(goodsorder.getId());
            goodsOrderDetail.setGoodsId(goodsSku.getGoodsId());
            //判断门店是否设置商品的价格信息
            if(Objects.nonNull(goodsorder.getDistributionShopId())){
@@ -856,7 +862,6 @@
                if(Objects.isNull(shopGoodsRelation)){
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,经销商未绑定["+goods.getName()+"]商品,请联系管理员!");
                }
                PlatformConfigDTO platformConfigDTO = systemDictDataService.getPlatformConfigDTO();
                //经销商优惠承担占比
                BigDecimal shopRate = new BigDecimal("100").subtract(platformConfigDTO.getTotalRate());
@@ -867,8 +872,11 @@
                if(shop.getSaleType().equals(Constants.ONE)){
                    goodsOrderDetail.setShopSettlement(goodsOrderDetail.getPrice().subtract(shopDeductAmount));
                }else {
                    //平台铺货
                    goodsOrderDetail.setShopSettlement(
                            shopGoodsRelation.getPrice().subtract(shopGoodsRelation.getPrice()).subtract(shopDeductAmount));
                            goodsOrderDetail.getPrice()
                                    .subtract(shopGoodsRelation.getPrice())
                                    .subtract(shopDeductAmount));
                }
                if(goodsOrderDetail.getShopSettlement().compareTo(BigDecimal.ZERO)<Constants.ZERO){
                    goodsOrderDetail.setShopSettlement(BigDecimal.ZERO);
@@ -876,12 +884,16 @@
            }else{
                goodsOrderDetail.setShopSettlement(BigDecimal.ZERO);
            }
            shopSettlement = shopSettlement.add(goodsOrderDetail.getShopSettlement());
            goodsOrderDetailList.add(goodsOrderDetail);
            //删除购物车商品
            shopcartMapper.delete(new QueryWrapper<Shopcart>().lambda()
                    .eq(Shopcart::getMemberId,member.getId())
                    .eq(Shopcart::getGoodsSkuId,goodsOrderDetail.getGoodsSkuId())
            );
        }
        if(CollectionUtils.isNotEmpty(goodsOrderDetailList)){
            goodsorderDetailMapper.insert(goodsOrderDetailList);
        }
        //积分变动记录
        if(goodsorder.getUseIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
@@ -899,6 +911,8 @@
        if(goodsorder.getPrice().compareTo(orderPayRequest.getTitlePrice())!=Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"商品价格发生变化,请刷新后重新支付!");
        }
        //存在现金支付
        if(Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ZERO)){
            return this.wxPay(goodsorder,member);
@@ -906,6 +920,7 @@
        //无现金支付
        goodsorderMapper.update(null,new UpdateWrapper<Goodsorder>().lambda()
                .set(Goodsorder::getStatus,Constants.ONE)
                .set(Goodsorder::getShopSettlement,shopSettlement)
                .set(Goodsorder::getPayStatus,Constants.OrderStatus.PAY_DONE.getKey())
                .set(Goodsorder::getPayDate,DateUtil.getCurrDateTime())
                .set(Goodsorder::getId,goodsorder.getId())
@@ -993,7 +1008,7 @@
            request.setBody("平台商城");
            request.setAttach("shopGoods");
            request.setOutTradeNo(goodsorder.getCode().toString());
            request.setTotalFee(BaseWxPayRequest.yuanToFen(goodsorder.getPrice().toString()));
            request.setTotalFee(1);//BaseWxPayRequest.yuanToFen(goodsorder.getPrice().toString()));
          //  request.setTotalFee(2);
            request.setTimeStart(DateUtil.DateToString(new Date(), "yyyyMMddHHmmss"));
            request.setSpbillCreateIp(this.getIpAddr());
@@ -1244,8 +1259,7 @@
            fundMapper.insert(fund);
        }
        //订单已支付状态 , 使用了积分 且积分使用大于0
        if(goodsorder.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO
                &&Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.PAY_DONE.getKey())){
        if(goodsorder.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
            //更新余额信息 添加积分变动记录
            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
            dealIntegralRequest.setIntegralNum(goodsorder.getIntegral());
@@ -1291,6 +1305,8 @@
                memberCouponMapper.updateById(memberCoupon);
            }
        }
    }
    public BigDecimal getDeductAmount(List<PayDetailRequest> requestList){
@@ -1339,6 +1355,7 @@
        OrderPayConfirmResponse orderPayConfirmResponse = new OrderPayConfirmResponse();
        List<Goods> goodsList = goodsMapper.selectJoinList(Goods.class,
                new MPJLambdaWrapper<Goods>()
                        .selectAll(Goods.class)
                        .selectAs(GoodsSku::getPrice,Goods::getSkuPrice)
                        .selectAs(GoodsSku::getId,Goods::getSkuId)
                        .selectAs(GoodsSku::getIntegralRate,Goods::getDeductRata)
@@ -1349,8 +1366,17 @@
        if(CollectionUtils.isEmpty(goodsList)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未匹配到商品信息");
        }
        List<OrderGoodsCalculateResponse> goodsCalculateList = ListUtil.copyProperties(goodsList,OrderGoodsCalculateResponse::new);
        List<OrderGoodsCalculateResponse> goodsCalculateList = ListUtil.copyProperties(goodsList,OrderGoodsCalculateResponse::new);
        String fullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode();
        for (OrderGoodsCalculateResponse orderGoodsCalculateResponse:goodsCalculateList) {
            orderGoodsCalculateResponse.setSkuImg(StringUtils.isNotBlank(orderGoodsCalculateResponse.getSkuImg())?fullUrl+orderGoodsCalculateResponse.getSkuImg():null);
            if(Objects.isNull(orderGoodsCalculateResponse.getCouponDeductCash())){
                orderGoodsCalculateResponse.setCouponDeductCash(BigDecimal.ZERO);
            }
//            orderGoodsCalculateResponse.setIntegralDeductCash(BigDecimal.ZERO);
        }
        //订单总金额
        BigDecimal amount = BigDecimal.ZERO;
        //优惠券抵扣金额
@@ -1383,7 +1409,7 @@
                if(CollectionUtils.isEmpty(memberCoupons)){
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"选择的优惠券无效,请刷新重试");
                }
                memberCoupon = memberCouponList.get(Constants.ZERO);
                memberCoupon = memberCoupons.get(Constants.ZERO);
                couponAmount = memberCoupon.getValidAmount();
                memberCouponService.calculateCouponRata(memberCoupon,goodsCalculateList,amount);
                orderPayConfirmResponse.setMemberCoupon(memberCoupon);
@@ -1490,12 +1516,12 @@
        if(Constants.equalsInteger(type,Constants.ZERO)){
            if( Constants.equalsInteger(platformConfigDTO.getReturnMemberIntegralStatus(),Constants.ZERO)
                && Objects.nonNull(platformConfigDTO.getReturnMemberIntegral())){
                integralBack = payAmount.divide(platformConfigDTO.getReturnMemberIntegral(),0,BigDecimal.ROUND_DOWN);
                integralBack = payAmount.multiply(platformConfigDTO.getReturnMemberIntegral()).divide(BigDecimal.ONE,0,BigDecimal.ROUND_DOWN);
            }
        }else{
            if( Constants.equalsInteger(platformConfigDTO.getReturnShopIntegralStatus(),Constants.ZERO)
                    && Objects.nonNull(platformConfigDTO.getReturnShopIntegral())){
                integralBack = payAmount.divide(platformConfigDTO.getReturnShopIntegral(),0,BigDecimal.ROUND_DOWN);
                integralBack = payAmount.multiply(platformConfigDTO.getReturnShopIntegral()).divide(BigDecimal.ONE,0,BigDecimal.ROUND_DOWN);
            }
        }
        return integralBack;
@@ -1511,14 +1537,14 @@
     */
    public BigDecimal  calculateIntegralRata(OrderPayConfirmResponse orderPayConfirmResponse,List<OrderGoodsCalculateResponse> goodsCalculateList,BigDecimal totalIntegral){
        //当前选择商品最大可用积分抵扣的金额
        BigDecimal maxDeductionCash =  goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(i.getCouponDeductCash())
        BigDecimal maxDeductionCash =  goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(Objects.isNull(i.getCouponDeductCash())?BigDecimal.ZERO:i.getCouponDeductCash())
                .multiply(i.getDeductRata()).multiply(new BigDecimal("0.01"))).reduce(BigDecimal.ZERO,BigDecimal::add);
        //积分 - 现金 比例
        //积分-现金兑换比例(XXX积分抵扣1元)
        BigDecimal cashToIntegralRata = new BigDecimal(systemDictDataBiz.queryByCode(Constants.SHOP_CONFIG,Constants.INTEGRAL_EXCHANGE_CASH_RATA).getCode());
        //当前选择商品抵扣需要使用的积分
        BigDecimal maxDeductionIntegral =  maxDeductionCash.multiply(cashToIntegralRata).multiply(new BigDecimal("100"));
        BigDecimal maxDeductionIntegral =  maxDeductionCash.multiply(cashToIntegralRata);
        //获取当前需要支付的现金总额
        BigDecimal payCash =  goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(i.getCouponDeductCash())).reduce(BigDecimal.ZERO,BigDecimal::add);
        BigDecimal payCash =  goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(Objects.isNull(i.getCouponDeductCash())?BigDecimal.ZERO:i.getCouponDeductCash())).reduce(BigDecimal.ZERO,BigDecimal::add);
        //如果实际积分少于最大需要积分 需要计算比例占比 去对应添加至对应的商品里
        //循环下单商品列表 计算应该使用的积分值
@@ -1536,7 +1562,7 @@
        //剩余积分值
        orderPayConfirmResponse.setSurplusIntegral(totalIntegral);
        //实际抵扣使用积分
        orderPayConfirmResponse.setDeductIntegral(totalIntegral.compareTo(maxDeductionCash)<=Constants.ZERO?totalIntegral:maxDeductionIntegral);
        orderPayConfirmResponse.setDeductIntegral(totalIntegral.compareTo(maxDeductionIntegral)<=Constants.ZERO?totalIntegral:maxDeductionIntegral);
        return realDeductionCash;
    }