rk
2025-12-15 12d724c247e4f7dcb77b3a94891ccf4d86b53cfa
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -8,10 +8,7 @@
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.RedisUtil;
import com.doumee.core.utils.Utils;
import com.doumee.core.utils.*;
import com.doumee.core.utils.kuaidi100.DeliveryDTO;
import com.doumee.core.utils.kuaidi100.ExpressUtils;
import com.doumee.core.wx.SendWxMessage;
@@ -22,17 +19,17 @@
import com.doumee.dao.business.join.GoodsorderJoinMapper;
import com.doumee.dao.business.join.PlanorderDetailJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.web.dto.CouponDTO;
import com.doumee.dao.web.request.DealIntegralRequest;
import com.doumee.dao.web.request.OrderPayRequest;
import com.doumee.dao.web.request.PayDetailRequest;
import com.doumee.dao.web.request.ShopOrderPayRequest;
import com.doumee.dao.web.request.goods.MemberOrderRequest;
import com.doumee.dao.web.request.goods.DealOrderRequest;
import com.doumee.dao.web.request.goods.OrderCommentRequest;
import com.doumee.dao.web.request.goods.OrderGoodsCommentRequest;
import com.doumee.dao.web.response.MyPageResponse;
import com.doumee.dao.web.response.goods.MemberOrderDetailResponse;
import com.doumee.dao.web.response.goods.MemberOrderResponse;
import com.doumee.dao.web.response.goods.PayResponse;
import com.doumee.dao.web.response.goods.*;
import com.doumee.service.business.AreasService;
import com.doumee.service.business.GoodsorderService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -44,15 +41,16 @@
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
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.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@@ -61,6 +59,8 @@
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.*;
import java.util.Date;
import java.util.stream.Collectors;
/**
 * 商品订单信息表Service实现
@@ -93,6 +93,9 @@
    @Autowired
    private AddrMapper addrMapper;
    @Autowired
    private ShopMapper shopMapper;
    @Autowired
    private MemberCouponMapper memberCouponMapper;
@@ -129,6 +132,9 @@
    @Autowired
    private GoodsorderDetailJoinMapper goodsorderDetailJoinMapper;
    @Autowired
    private IntegralMapper integralMapper;
    @Override
    public Integer create(Goodsorder goodsorder) {
@@ -179,6 +185,29 @@
        goodsorder.setEditor(user.getId());
        goodsorderMapper.updateById(goodsorder);
    }
    @Override
    public IPage<Shop> getShopPage(PageWrap<Shop> pageWrap) {
        IPage<Shop> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        Shop model = pageWrap.getModel();
        if(Objects.isNull(model.getLatitude())||Objects.isNull(model.getLongitude())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        return shopMapper.selectPage(page,new MPJLambdaWrapper<Shop>()
                        .selectAll(Shop.class)
                .select(" case when LONGITUDE IS NULL OR LATITUDE IS NULL THEN 0 " +
                        " when t.TYPE = 0 then CONVERT( ST_Distance_Sphere ( POINT ( LONGITUDE, LATITUDE ), POINT ( "+model.getLongitude()+", "+model.getLatitude()+" )) /1000,DECIMAL(15,2))  " +
                        " when t.TYPE = 1 then   CONVERT( ST_Distance_Sphere ( POINT ( LONGITUDE, LATITUDE ), POINT ( "+model.getLongitude()+", "+model.getLatitude()+" )) /1000,DECIMAL(15,2)) " +
                        " else  CONVERT( ST_Distance_Sphere ( POINT ( LONGITUDE, LATITUDE ), POINT ( "+model.getLongitude()+", "+model.getLatitude()+" )) /1000,DECIMAL(15,2)) end " , Shop::getDistance)
                        .eq(Shop::getIsdeleted,Constants.ZERO)
                        .eq(Shop::getStatus,Constants.ZERO)
                        .like(StringUtils.isNotBlank(model.getAddr()),Shop::getAddr,model.getAddr())
                        .like(StringUtils.isNotBlank(model.getName()),Shop::getName,model.getName())
                .orderByAsc(" distance ")
        );
    }
    /**
     * 咖豆 商城订单发货
     * @param goodsorder
@@ -614,7 +643,7 @@
        goodsorderMapper.insert(goodsorder);
        //数据存储
        BigDecimal total = Constants.formatBigdecimal(goodsorder.getPrice()).add(Constants.formatBigdecimal(goodsorder.getIntegral())).add(Constants.formatBigdecimal(goodsorder.getCouponPrice()));
        BigDecimal rate =Constants.formatBigdecimal(goodsorder.getCouponPrice()) .divide(total,4,BigDecimal.ROUND_HALF_UP);
        BigDecimal rate =Constants.formatBigdecimal(goodsorder.getCouponPrice()).divide(total,4,BigDecimal.ROUND_HALF_UP);
        BigDecimal totalWxMoney = new BigDecimal(0);
        BigDecimal totalIntegral = new BigDecimal(0);
        for (int i =0;i< goodsOrderDetailList.size();i++) {
@@ -630,7 +659,7 @@
                //当前明细实际价格
                BigDecimal detialTotal = Constants.formatBigdecimal(goodsOrderDetail.getPrice()).multiply(new BigDecimal(Constants.formatIntegerNum(goodsOrderDetail.getGoodsNum())));
                //折算优惠券后支付价格(包含现金和余额部分)
                BigDecimal  actDetialTotal = detialTotal .subtract(detialTotal.multiply(rate));
                BigDecimal  actDetialTotal = detialTotal.subtract(detialTotal.multiply(rate));
                //按现金和积分支付比例,折算每个明细现金和积分支付的数量
                BigDecimal rate1 = detialTotal .divide(total,4,BigDecimal.ROUND_HALF_UP);
                //可退现金金额
@@ -680,6 +709,158 @@
    }
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public PayResponse orderPay(ShopOrderPayRequest orderPayRequest,MemberCouponServiceImpl memberCouponService){
        Member member = memberMapper.selectById(orderPayRequest.getMemberId());
        Goodsorder goodsorder = new Goodsorder();
        goodsorder.setCreator(orderPayRequest.getMemberId());
        goodsorder.setIntegral(BigDecimal.ZERO);
        goodsorder.setCreateDate(new Date());
        goodsorder.setIsdeleted(Constants.ZERO);
        goodsorder.setMemberInfo(orderPayRequest.getRemark());
        goodsorder.setMemberId(member.getId());
        goodsorder.setType(Constants.ZERO);
        goodsorder.setStatus(Constants.ZERO);
        if(Constants.equalsInteger(orderPayRequest.getReceiveType(),Constants.ZERO)){
            //查询收货地址
            Addr addr = addrMapper.selectById(orderPayRequest.getAddressId());
            if(Objects.isNull(addr)){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到收货地址信息!");
            }
            Areas area = areasService.findById(addr.getAreaId(), Constants.TWO);
            if(Objects.isNull(area)){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"收货地址区划信息发生变化,请更新后下单!");
            }
            goodsorder.setAddrId(addr.getId());
            goodsorder.setLinkaddr(area.getProvinceName()+area.getCityName() + area.getName() + addr.getAddr());
            goodsorder.setLinkphone(addr.getPhone());
            goodsorder.setLinkname(addr.getName());
            if(Objects.nonNull(member.getBindShopId())){
                goodsorder.setDistributionShopId(member.getBindShopId());
            }
        }else{
            if(Objects.isNull(orderPayRequest.getShopId())){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"请选择正确的自提门店!");
            }
            Shop shop = shopMapper.selectById(orderPayRequest.getShopId());
            if(Objects.isNull(shop)){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"请选择正确的自提门店!");
            }
            //判断门店是否设置商品的价格信息
            //根据选择商户进行会员与商户信息绑定
            if(Objects.isNull(member.getBindShopId())){
                memberMapper.update(new UpdateWrapper<Member>().lambda()
                        .set(Member::getBindShopId,shop.getId())
                        .eq(Member::getId,member.getId())
                );
            }
            goodsorder.setPickUpShopId(shop.getId());
            goodsorder.setDistributionShopId(shop.getId());
            if(Objects.isNull(member.getBindShopId())){
                member.setBindShopId(shop.getId());
            }
        }
        //单据编号 自增
        goodsorder.setCode(getNextInCode());
        //计算订单总金额
        BigDecimal sumPrice = BigDecimal.ZERO;
        //存储记录明细
        OrderPayConfirmResponse orderPayConfirmResponse = this.orderPayConfirm(orderPayRequest.getReceiveType(),orderPayRequest.getPayDetailRequestList(),orderPayRequest.getAddressId(),memberCouponService,member.getId());
        if(Objects.isNull(orderPayConfirmResponse)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"系统支付错误,请联系管理员");
        }
        goodsorder.setPrice(orderPayConfirmResponse.getPayAmount());
        goodsorder.setTotalPrice(orderPayConfirmResponse.getAmount());
        goodsorder.setUseIntegral(orderPayConfirmResponse.getDeductIntegral());
        goodsorder.setIntegralPrice(orderPayConfirmResponse.getIntegralAmount());
        if(Objects.nonNull(orderPayConfirmResponse.getMemberCoupon())){
            MemberCoupon memberCoupon = memberCouponMapper.selectById(orderPayConfirmResponse.getMemberCoupon().getId());
            if(Objects.isNull(memberCoupon)){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到优惠券信息!");
            }
            if(memberCoupon.getStatus().equals(Constants.ONE)){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"优惠券已使用!");
            }
            sumPrice = sumPrice.subtract(memberCoupon.getPrice());
            goodsorder.setCouponId(memberCoupon.getId());
            goodsorder.setCouponPrice(orderPayConfirmResponse.getMemberCoupon().getValidAmount());
            memberCouponMapper.update(null,new UpdateWrapper<MemberCoupon>().lambda()
                    .set(MemberCoupon::getStatus,Constants.ONE)
                    .set(MemberCoupon::getUseDate,DateUtil.getCurrDateTime())
                    .eq(MemberCoupon::getId,memberCoupon.getId())
            );
        }
        goodsorderMapper.insert(goodsorder);
        List<OrderGoodsCalculateResponse> goodsCalculateList  = orderPayConfirmResponse.getGoodsCalculateList();
        if(CollectionUtils.isEmpty(goodsCalculateList)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"无明细数据,请检查选择数据!");
        }
        List<GoodsorderDetail> goodsOrderDetailList = new ArrayList<>();
        for (OrderGoodsCalculateResponse payDetailRequest:goodsCalculateList) {
            //查询商品
            GoodsSku goodsSku = goodsSkuMapper.selectById(payDetailRequest.getSkuId());
            if(Objects.isNull(goodsSku)){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到商品SKU信息!");
            }
            Goods goods = goodsMapper.selectById(goodsSku.getGoodsId());
            if(Objects.isNull(goods)){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到商品信息!");
            }
            if(goods.getStatus().equals(Constants.ONE)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"存在商品已删除或已下架,无法下单");
            }
            if(goodsSku.getStock().compareTo(new BigDecimal(Constants.formatIntegerNum(payDetailRequest.getGoodsNum())))<Constants.ZERO){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"存在商品库存不足,无法下单!");
            }
            //商品库存扣除
            goodsSku.setStock(goodsSku.getStock().subtract(new BigDecimal(Constants.formatIntegerNum(payDetailRequest.getGoodsNum()))));
            goodsSkuMapper.updateById(goodsSku);
            GoodsorderDetail goodsOrderDetail = new GoodsorderDetail();
            goodsOrderDetail.setCreator(member.getId());
            goodsOrderDetail.setCreateDate(new Date());
            goodsOrderDetail.setImgurl(StringUtils.isBlank(goodsSku.getImgurl())?goods.getImgurl():goodsSku.getImgurl());
            goodsOrderDetail.setName(goods.getName());
            goodsOrderDetail.setGoodsSkuId(goodsSku.getId().toString());
            goodsOrderDetail.setSkuName(goodsSku.getName());
            goodsOrderDetail.setPrice(goodsSku.getPrice());
            goodsOrderDetail.setGoodsNum(payDetailRequest.getGoodsNum());
            goodsOrderDetail.setGoodsWeight(payDetailRequest.getWeight());
            goodsOrderDetail.setCouponDeduct(payDetailRequest.getCouponDeductCash());
            goodsOrderDetail.setIntegralDeduct(payDetailRequest.getIntegralDeductCash());
            goodsOrderDetail.setOrderId(goodsorder.getId());
            goodsOrderDetailList.add(goodsOrderDetail);
            //删除购物车商品
            shopcartMapper.delete(new QueryWrapper<Shopcart>().lambda()
                    .eq(Shopcart::getMemberId,member.getId())
                    .eq(Shopcart::getGoodsSkuId,goodsOrderDetail.getGoodsSkuId())
            );
        }
        //积分变动记录
        Integral integral =Integral.createIntegral(member.getId(),Constants.INTEGRAL_TYPE.ORDER_PAY,goodsorder.getId());
        integral.setNum(goodsorder.getUseIntegral());
        integral.setTotalNum(member.getIntegral().subtract(goodsorder.getUseIntegral()));
        integralMapper.insert(integral);
        //更新用户积分
        memberMapper.subtractIntegral(member.getId(),goodsorder.getUseIntegral());
        if(goodsorder.getPrice().compareTo(orderPayRequest.getTitlePrice())!=Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"商品价格发生变化,请刷新后重新支付!");
        }
        return this.wxPay(goodsorder,member);
    }
    /**
     * 重新支付
     * @param orderId
@@ -715,7 +896,7 @@
            Object response = null;
            WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
            request.setBody("平台商城");
            request.setAttach("terraceMall");
            request.setAttach("shopGoods");
            request.setOutTradeNo(goodsorder.getCode().toString());
            request.setTotalFee(BaseWxPayRequest.yuanToFen(goodsorder.getPrice().toString()));
          //  request.setTotalFee(2);
@@ -898,6 +1079,182 @@
            }
        }
    }
    public BigDecimal getDeductAmount(List<PayDetailRequest> requestList){
        List<MemberCoupon> memberCouponList = new ArrayList<>();
        List<GoodsSku> goodsSkuList = goodsSkuMapper.selectList(new QueryWrapper<GoodsSku>()
                .lambda()
                .eq(GoodsSku::getIsdeleted,Constants.ZERO)
                .in(GoodsSku::getId,requestList.stream().map(i->i.getGoodsSkuId()).collect(Collectors.toList()))
        );
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(goodsSkuList)||!Constants.equalsInteger(goodsSkuList.size(),requestList.size())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"商品SKU信息错误,请刷新重试");
        }
        //查询商品列表
        List<Goods> goodsList = goodsMapper.selectJoinList(Goods.class,
                new MPJLambdaWrapper<Goods>()
                        .selectAs(GoodsSku::getPrice,Goods::getSkuPrice)
                        .selectAs(GoodsSku::getId,Goods::getSkuId)
                        .leftJoin(GoodsSku.class,GoodsSku::getGoodsId,Goods::getId)
                        .in(GoodsSku::getId,requestList.stream().map(i->i.getGoodsSkuId()).collect(Collectors.toList())));
        if(Objects.isNull(goodsList)){
            return BigDecimal.ZERO;
        }
        //获取选择的商品总金额 与 单个商品金额
        BigDecimal deductAmount = BigDecimal.ZERO;
        for (Goods goods:goodsList) {
            List<PayDetailRequest> request = requestList.stream().filter(i->Constants.equalsInteger(i.getGoodsSkuId(), goods.getSkuId())).collect(Collectors.toList());
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(request)){
                goods.setSkuAmount(goods.getSkuPrice().multiply(new BigDecimal(request.get(Constants.ZERO).getGoodsNum()+"")));
                deductAmount = deductAmount.add(goods.getSkuAmount().multiply(goods.getDeductRata()));
            }
        }
        return deductAmount;
    }
    /**
     * 订单确认接口
     * @param receiveType 0=快递配送 1=自提
     * @param requestList
     * @param addressId
     * @param memberCouponService
     * @param memberId
     */
    public OrderPayConfirmResponse orderPayConfirm(Integer receiveType,List<PayDetailRequest> requestList,Integer addressId,
                                MemberCouponServiceImpl memberCouponService,Integer memberId){
        OrderPayConfirmResponse orderPayConfirmResponse = new OrderPayConfirmResponse();
        List<Goods> goodsList = goodsMapper.selectJoinList(Goods.class,
                new MPJLambdaWrapper<Goods>()
                        .selectAs(GoodsSku::getPrice,Goods::getSkuPrice)
                        .selectAs(GoodsSku::getId,Goods::getSkuId)
                        .selectAs(GoodsSku::getIntegralRate,Goods::getDeductRata)
                        .selectAs(GoodsSku::getWeight,Goods::getWeight)
                        .selectAs(GoodsSku::getImgurl,Goods::getSkuImg)
                        .leftJoin(GoodsSku.class,GoodsSku::getGoodsId,Goods::getId)
                        .in(GoodsSku::getId,requestList.stream().map(i->i.getGoodsSkuId()).collect(Collectors.toList())));
        if(CollectionUtils.isEmpty(goodsList)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未匹配到商品信息");
        }
        List<OrderGoodsCalculateResponse> goodsCalculateList = ListUtil.copyProperties(goodsList,OrderGoodsCalculateResponse::new);
        //订单总金额
        BigDecimal amount = BigDecimal.ZERO;
        //优惠券抵扣金额
        BigDecimal couponAmount = BigDecimal.ZERO;
        //积分抵扣金额
        BigDecimal integralAmount = BigDecimal.ZERO;
        //抵扣积分值
        BigDecimal deductIntegral = BigDecimal.ZERO;
        //邮费金额
        BigDecimal mailAmount = BigDecimal.ZERO;
        for (OrderGoodsCalculateResponse response:goodsCalculateList) {
            List<PayDetailRequest> request = requestList.stream().filter(i->Constants.equalsInteger(i.getGoodsSkuId(), response.getSkuId())).collect(Collectors.toList());
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(request)){
                PayDetailRequest payDetailRequest = request.get(Constants.ZERO);
                response.setSkuAmount(response.getSkuPrice().multiply(new BigDecimal(payDetailRequest.getGoodsNum()+"")));
                response.setGoodsNum(payDetailRequest.getGoodsNum());
                amount = amount.add(response.getSkuAmount());
            }
        }
        //获取优惠券优惠金额
        List<MemberCoupon> memberCouponList = memberCouponService.getApplyCoupon(requestList,memberId);
        MemberCoupon memberCoupon = new MemberCoupon();
        if(CollectionUtils.isNotEmpty(memberCouponList)){
            memberCoupon = memberCouponList.get(Constants.ZERO);
            couponAmount = memberCoupon.getValidAmount();
            memberCouponService.calculateCouponRata(memberCoupon,goodsCalculateList,amount);
            orderPayConfirmResponse.setMemberCoupon(memberCoupon);
        }
        //积分抵扣金额
        //查询用户总积分
        Member member = memberMapper.selectById(memberId);
        //积分大于0 且大于可用积分配置项 才可以使用
        if(member.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
            //最低可用启用积分
            BigDecimal minimumIntegral = new BigDecimal(systemDictDataBiz.queryByCode(Constants.SHOP_CONFIG,Constants.MINIMUM_AVAILABLE_INTEGRAL).getCode());
            if(member.getIntegral().compareTo(minimumIntegral)>=Constants.ZERO){
                this.calculateIntegralRata(goodsCalculateList,member.getIntegral());
            }
        }
        //邮费金额
        if(Constants.equalsInteger(receiveType,Constants.ZERO)){
            //TODO  根据收货地址 查询运费配置
            //计算商品信息总重量
            BigDecimal totalWeight = goodsCalculateList.stream().map(i->
                    i.getWeight().multiply(new BigDecimal(i.getGoodsNum().toString()))
                    ).reduce(BigDecimal.ZERO,BigDecimal::add);
        }
        orderPayConfirmResponse.setAmount(amount);
        orderPayConfirmResponse.setCouponAmount(couponAmount);
        orderPayConfirmResponse.setDeductIntegral(deductIntegral);
        orderPayConfirmResponse.setMailAmount(mailAmount);
        orderPayConfirmResponse.setIntegralAmount(integralAmount);
        orderPayConfirmResponse.setPayAmount(amount.subtract(couponAmount).subtract(mailAmount).subtract(integralAmount));
        orderPayConfirmResponse.setGoodsCalculateList(goodsCalculateList);
        BigDecimal cashToIntegralRata = new BigDecimal(systemDictDataBiz.queryByCode(Constants.SHOP_CONFIG,Constants.CASH_EXCHANGE_INTEGRAL_RATA).getCode());
        orderPayConfirmResponse.setIntegralBack(
                orderPayConfirmResponse.getPayAmount().multiply(cashToIntegralRata)
        );
        return orderPayConfirmResponse;
    }
    /**
     *
     * @param goodsCalculateList 商品集合
     * @param totalIntegral 用户总积分
     */
    public void  calculateIntegralRata(List<OrderGoodsCalculateResponse> goodsCalculateList,BigDecimal totalIntegral){
        //当前选择商品最大可用积分抵扣的金额
        BigDecimal maxDeductionCash =  goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(i.getCouponDeductCash())
                .multiply(i.getDeductRata())).reduce(BigDecimal.ZERO,BigDecimal::add);
        //积分 - 现金 比例
        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 deductionRata = BigDecimal.ONE;
        //如果实际积分少于最大需要积分 需要计算比例占比 去对应添加至对应的商品里
        if(totalIntegral.compareTo(maxDeductionIntegral)<=Constants.ZERO) {
            deductionRata = totalIntegral.divide(maxDeductionIntegral, 2, BigDecimal.ROUND_HALF_UP);
        }
        //获取总的抵扣金额 与 每个商品可抵扣金额
        //已用占比比例值
        BigDecimal rata = BigDecimal.ZERO;
        //剩余可分配金额
        BigDecimal surplusValidAmount = maxDeductionCash;
        for (int j = 0; j < goodsCalculateList.size(); j++) {
            if(Constants.equalsInteger(j+1,goodsCalculateList.size())){
                goodsCalculateList.get(j).setIntegralMaxDeductCash(surplusValidAmount);
                goodsCalculateList.get(j).setOrderIntegralRata(new BigDecimal("1").subtract(rata));
            }else{
                //积分最大可抵扣金额
                goodsCalculateList.get(j).setIntegralMaxDeductCash(
                        goodsCalculateList.get(j).getSkuAmount()
                                .subtract(goodsCalculateList.get(j).getCouponDeductCash())
                                .multiply(goodsCalculateList.get(j).getDeductRata()));
                //订单中积分金额实际占比
                goodsCalculateList.get(j).setOrderIntegralRata(
                                goodsCalculateList.get(j)
                                        .getIntegralMaxDeductCash().divide(maxDeductionCash,2,BigDecimal.ROUND_DOWN)
                        );
                rata = rata.add(goodsCalculateList.get(j).getOrderIntegralRata());
                surplusValidAmount = surplusValidAmount.subtract(goodsCalculateList.get(j).getIntegralMaxDeductCash());
            }
            //如果用户积分大于本次需要使用的最大积分 则直接使用否则需要重新计算
            goodsCalculateList.get(j).setIntegralDeductCash(goodsCalculateList.get(j).getIntegralMaxDeductCash().multiply(deductionRata));
            goodsCalculateList.get(j).setIntegralDeduct(goodsCalculateList.get(j).getIntegralMaxDeductCash().multiply(cashToIntegralRata).multiply(deductionRata));
        }
    }
    /**
@@ -1175,4 +1532,5 @@
    }
}