puzhibing
2024-10-28 f8724cd2c94519f72ac6803c55689f1c2047134f
Merge remote-tracking branch 'origin/master'
6个文件已修改
298 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderAccountingStrategy.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 234 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderAccountingStrategy.java
@@ -105,5 +105,4 @@
}
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
@@ -237,9 +237,19 @@
                    faultMessage.setDelFlag(false);
                    faultMessage.setContent("设备故障");
                    faultMessageService.save(faultMessage);
                    chargingPile.setStatus(0 == status ? 1 : 3);
                    chargingPileService.updateById(chargingPile);
                    TChargingPile chargingPile1 = new TChargingPile();
                    chargingPile1.setId(chargingPile.getId());
                    chargingPile1.setStatus(3);
                    chargingPileService.updateById(chargingPile1);
                    List<TChargingGun> list1 = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, chargingPile.getId()));
                    for (TChargingGun chargingGun : list1) {
                        TChargingGun chargingGun1 = new TChargingGun();
                        chargingGun1.setId(chargingGun.getId());
                        chargingGun1.setStatus(7);
                        chargingGunService.updateById(chargingGun1);
                    }
                }
            }
            if(chargingPile.getStatus() != 1 && 0 == status){
@@ -249,9 +259,19 @@
                    one.setEndTime(LocalDateTime.now());
                    faultMessageService.updateById(one);
                }
                chargingPile.setStatus(0 == status ? 1 : 3);
                chargingPileService.updateById(chargingPile);
                TChargingPile chargingPile1 = new TChargingPile();
                chargingPile1.setId(chargingPile.getId());
                chargingPile1.setStatus(1);
                chargingPileService.updateById(chargingPile1);
                List<TChargingGun> list1 = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, chargingPile.getId()));
                for (TChargingGun chargingGun : list1) {
                    TChargingGun chargingGun1 = new TChargingGun();
                    chargingGun1.setId(chargingGun.getId());
                    chargingGun1.setStatus(2);
                    chargingGunService.updateById(chargingGun1);
                }
            }
            if(0 == status){
                Map<String, Object> charging_pile_online = redisService.getCacheMap("charging_pile_online");
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -586,24 +586,29 @@
    @Override
    public void updateStatus() {
        List<TChargingPile> list = this.list(new LambdaQueryWrapper<TChargingPile>().eq(TChargingPile::getDelFlag, 0));
        List<TChargingPile> datas = new ArrayList();
        Map<String, Object> charging_pile_online = redisService.getCacheMap("charging_pile_online");
        for (TChargingPile chargingPile : list) {
            Long time = (Long) charging_pile_online.get(chargingPile.getCode());
            if(null != time && System.currentTimeMillis() - time > 60000){
                chargingPile.setStatus(2);
                datas.add(chargingPile);
            }
        }
        if(datas.size() > 0){
            for (TChargingPile data : datas) {
                TFaultMessage faultMessage = faultMessageService.getOne(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingPileId, data.getId())
                TChargingPile chargingPile1 = new TChargingPile();
                chargingPile1.setId(chargingPile.getId());
                chargingPile1.setStatus(2);
                this.updateById(chargingPile1);
                List<TChargingGun> list1 = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, chargingPile.getId()));
                for (TChargingGun chargingGun : list1) {
                    TChargingGun chargingGun1 = new TChargingGun();
                    chargingGun1.setId(chargingGun.getId());
                    chargingGun1.setStatus(1);
                    chargingGunService.updateById(chargingGun1);
                }
                //添加记录
                TFaultMessage faultMessage = faultMessageService.getOne(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingPileId, chargingPile.getId())
                        .eq(TFaultMessage::getStatus, 1).eq(TFaultMessage::getDelFlag, 0).isNull(TFaultMessage::getEndTime));
                if(null == faultMessage){
                    faultMessage = new TFaultMessage();
                    faultMessage.setSiteId(data.getSiteId());
                    faultMessage.setChargingPileId(data.getId());
                    faultMessage.setSiteId(chargingPile.getSiteId());
                    faultMessage.setChargingPileId(chargingPile.getId());
                    faultMessage.setStatus(1);
                    faultMessage.setDownTime(LocalDateTime.now());
                    faultMessage.setCreateTime(LocalDateTime.now());
@@ -612,7 +617,6 @@
                    faultMessageService.save(faultMessage);
                }
            }
            this.updateBatchById(datas);
        }
    }
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -348,7 +348,6 @@
    public AjaxResult<ChargingOrderInfoVO> chargingOrderInfo(String strategyId) {
        TChargingOrder byId = chargingOrderService.getById(strategyId);
        ChargingOrderInfoVO chargingOrderInfoVO = new ChargingOrderInfoVO();
        chargingOrderInfoVO.setCdElectronic(byId.getCurrent()!=null?byId.getCurrent().setScale(2, BigDecimal.ROUND_HALF_DOWN)+"":"");
        chargingOrderInfoVO.setCdVoltage(byId.getVoltage()!=null?byId.getVoltage().setScale(2, BigDecimal.ROUND_HALF_DOWN)+"":"");
        chargingOrderInfoVO.setSurplus(byId.getTotalElectricity()!=null?byId.getTotalElectricity().setScale(2, BigDecimal.ROUND_HALF_DOWN)+"":"");
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -66,10 +66,12 @@
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import javax.crypto.MacSpi;
import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
@@ -657,10 +659,107 @@
        
        log.error(chargingOrder.getCode() + ":-------------------远程调起开始充电请求-------------------" + platformStartCharging.toString());
        sendMessageClient.platformStartCharging(platformStartCharging);
        //异步线程检测远程启动的应答结果。如果失败,则需要全额退款
        Long id = chargingOrder.getId();
        //执行5分钟的定时任务检测
        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        scheduler.scheduleAtFixedRate(()->{
            if(timingDetection(id)){
                scheduler.shutdown();
            }
        }, 5, 1, TimeUnit.SECONDS);
        return AjaxResult.success();
    }
    
    /**
     * 定时检测mongodb数据库数据
     * @param id
     * @return
     */
    public boolean timingDetection(Long id){
        TChargingOrder chargingOrder = this.getById(id);
        if(chargingOrder.getStatus() != 2){
            return true;
        }
        String code = chargingOrder.getCode();
        String key = "AQJC_" + chargingOrder.getChargingGunId();
        List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData();
        if(null == data || data.size() == 0){
            return false;
        }
        log.error(code + ":-------------------开始检查调起充电结果-------------------" + data.toString());
        if(data.size() != 0){
            PlatformStartChargingReply platformStartChargingReply = data.get(1);
            Integer startup_result = platformStartChargingReply.getStartup_result();
            Integer failure_cause = platformStartChargingReply.getFailure_cause();
            Integer counter = counter_map.get(code);
            PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
            //5分钟内还未插枪则取消充电,退回金额。
            if(failure_cause == 5 && (null == counter || counter < 300)){
                counter = (null == counter ? 0 : counter) + 1;
                counter_map.put(code, counter);
                //启动失败
                preChargeCheck1.setStartupSuccess(3);
                preChargeCheck1.setFailureCause(failure_cause);
                redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
                return false;
            }
            //清除计时器中的无效数据
            counter_map.remove(code);
            TChargingOrder order = new TChargingOrder();
            order.setId(id);
            order.setAppUserId(chargingOrder.getAppUserId());
            if(0 == startup_result){
                //启动失败
                preChargeCheck1.setStartupSuccess(3);
                preChargeCheck1.setFailureCause(failure_cause);
                //启动失败后取消订单,退款操作
                refund(code);
                order.setStatus(-1);
                order.setEndMode(0);
            }else{
                //启动成功
                preChargeCheck1.setStartupSuccess(2);
                order.setStatus(3);
                order.setStartTime(LocalDateTime.now());
            }
            this.updateById(order);
            redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
            return true;
        }else{
            Integer counter = boot_failed_map.get(code);
            log.error(code + ":-------------------未上传开启充电结果-------------------" + counter);
            PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
            //5分钟内未启动成功,退回金额。
            if(null == counter || counter < 300){
                counter = (null == counter ? 0 : counter) + 1;
                boot_failed_map.put(code, counter);
                //启动失败
                preChargeCheck1.setStartupSuccess(3);
                preChargeCheck1.setFailureCause(0);
                redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
                return false;
            }
            //清除计时器中的无效数据
            boot_failed_map.remove(code);
            TChargingOrder order = new TChargingOrder();
            order.setId(id);
            order.setAppUserId(chargingOrder.getAppUserId());
            //启动失败
            preChargeCheck1.setStartupSuccess(3);
            preChargeCheck1.setFailureCause(0);
            //启动失败后取消订单,退款操作
            refund(code);
            order.setStatus(-1);
            order.setEndMode(0);
            this.updateById(order);
            redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
            return true;
        }
    }
    
    
    /**
@@ -799,7 +898,10 @@
        one.setRefundTime(LocalDateTime.now());
        chargingOrderRefundService.updateById(one);
        
        TChargingOrder chargingOrder = this.getById(one.getChargingOrderId());
        TChargingOrder order = this.getById(one.getChargingOrderId());
        TChargingOrder chargingOrder = new TChargingOrder();
        chargingOrder.setId(one.getChargingOrderId());
        chargingOrder.setAppUserId(order.getAppUserId());
        chargingOrder.setRefundStatus(2);
        chargingOrder.setRefundSerialNumber(refund_id);
        chargingOrder.setRefundTime(LocalDateTime.now());
@@ -867,14 +969,17 @@
    @Override
    @GlobalTransactional(rollbackFor = Exception.class)
    public AjaxResult stopCharging(String id) {
        TChargingOrder chargingOrder = this.getById(id);
        Integer status = chargingOrder.getStatus();
        TChargingOrder order = this.getById(id);
        Integer status = order.getStatus();
        if(status != 3){
            return AjaxResult.error("还未开始充电");
        }
        if(status == 4 || status == 5){
            return AjaxResult.error("不能重复操作");
        }
        TChargingOrder chargingOrder = new TChargingOrder();
        chargingOrder.setId(Long.valueOf(id));
        chargingOrder.setAppUserId(order.getAppUserId());
        chargingOrder.setEndTime(LocalDateTime.now());
        chargingOrder.setEndMode(1);
        this.updateById(chargingOrder);
@@ -1682,6 +1787,8 @@
        
        //开始处理计费明细数据和优惠数据
        chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
        SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        List<AccountingStrategyDetailOrderVo> lists = new ArrayList<>();
        for (int i = 0; i < accountingStrategyDetailOrderList.size(); i++) {
            Class<? extends TransactionRecordMessageVO> clazz = vo.getClass();
            try {
@@ -1710,44 +1817,100 @@
                    continue;
                }
                BigDecimal sharp_peak_charge = new BigDecimal(invoke.toString());
                TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
                chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId());
                chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId());
                chargingOrderAccountingStrategy.setType(strategyDetail.getType());
                chargingOrderAccountingStrategy.setStartTime(chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("HH:mm")));
                chargingOrderAccountingStrategy.setEndTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm")));
                chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence());
                chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge());
                chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge());
                //已充电总度数
                BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN);
                BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN);
                BigDecimal serviceCharge = originalServicePrice;
                BigDecimal vipDiscountAmount = BigDecimal.ZERO;
                //计算优惠金额
                if(null != chargingOrder.getVipDiscount()){
                    vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(chargingOrder.getVipDiscount())).setScale(2, RoundingMode.DOWN);
                    serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount()).setScale(2, RoundingMode.DOWN);
                }
                chargingOrderAccountingStrategy.setChargingCapacity(sharp_peak_charge);
                chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
                chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
                chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice);
                chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount);
                chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
                chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
                periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc);
                periodServicePrice_total = periodServicePrice_total.add(originalServicePrice);
                total = total.add(electrovalenc.add(originalServicePrice));
                AccountingStrategyDetailOrderVo vo1 = new AccountingStrategyDetailOrderVo();
                BeanUtils.copyProperties(strategyDetail, vo1);
                vo1.setStart(sdfs.parse(vo.getStart_time().split(" ")[0] + " " + strategyDetail.getStartTime() + ":00").getTime());
                vo1.setEnd(sdfs.parse(vo.getStart_time().split(" ")[0] + " " + strategyDetail.getEndTime() + ":00").getTime());
                vo1.setServiceCharge(sharp_peak_charge);
                lists.add(vo1);
            } catch (IllegalAccessException e) {
                throw new RuntimeException(e);
            } catch (InvocationTargetException e) {
                throw new RuntimeException(e);
            } catch (NoSuchMethodException e) {
                throw new RuntimeException(e);
            } catch (ParseException e) {
                throw new RuntimeException(e);
            }
        }
        Collections.sort(lists, new Comparator<AccountingStrategyDetailOrderVo>() {
            public int compare(AccountingStrategyDetailOrderVo s1, AccountingStrategyDetailOrderVo s2) {
                return s1.getStart() < s2.getStart() ? -1 : s1.getStart() == s2.getStart() ? 0 : 1;
            }
        });
        if(!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])){
            List<AccountingStrategyDetailOrderVo> list1 = new ArrayList<>(lists);
            for (AccountingStrategyDetailOrderVo orderVo : list1) {
                Calendar start = Calendar.getInstance();
                start.setTimeInMillis(orderVo.getStart());
                start.set(Calendar.DAY_OF_YEAR, start.get(Calendar.DAY_OF_YEAR) + 1);
                orderVo.setStart(start.getTimeInMillis());
                Calendar end = Calendar.getInstance();
                end.setTimeInMillis(orderVo.getEnd());
                end.set(Calendar.DAY_OF_YEAR, end.get(Calendar.DAY_OF_YEAR) + 1);
                orderVo.setEnd(end.getTimeInMillis());
            }
            lists.addAll(list1);
        }
        //开始处理明细
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS");
        SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm");
        Date start = null;
        Date end = null;
        try {
            start = sdf3.parse(vo.getStart_time());
            end = sdf3.parse(vo.getEnd_time());
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        for (AccountingStrategyDetailOrderVo strategyDetail : lists) {
            if(strategyDetail.getStart() < start.getTime() || strategyDetail.getEnd() > end.getTime()){
                continue;
            }
            BigDecimal sharp_peak_charge = strategyDetail.getChargingCapacity();
            TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
            chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId());
            chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId());
            chargingOrderAccountingStrategy.setType(strategyDetail.getType());
            chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence());
            chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge());
            chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge());
            if(start.getTime() >= strategyDetail.getStart()){
                chargingOrderAccountingStrategy.setStartTime(sdf2.format(start));
            }else{
                chargingOrderAccountingStrategy.setStartTime(strategyDetail.getStartTime());
            }
            if(end.getTime() >= strategyDetail.getEnd()){
                chargingOrderAccountingStrategy.setStartTime(strategyDetail.getEndTime());
            }else{
                chargingOrderAccountingStrategy.setStartTime(sdf2.format(end));
            }
            //已充电总度数
            BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN);
            BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(sharp_peak_charge).setScale(2, RoundingMode.DOWN);
            BigDecimal serviceCharge = originalServicePrice;
            BigDecimal vipDiscountAmount = BigDecimal.ZERO;
            //计算优惠金额
            if(null != chargingOrder.getVipDiscount()){
                vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(chargingOrder.getVipDiscount())).setScale(2, RoundingMode.DOWN);
                serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount()).setScale(2, RoundingMode.DOWN);
            }
            chargingOrderAccountingStrategy.setChargingCapacity(sharp_peak_charge);
            chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
            chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
            chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice);
            chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount);
            chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
            chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
            periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc);
            periodServicePrice_total = periodServicePrice_total.add(originalServicePrice);
            total = total.add(electrovalenc.add(originalServicePrice));
        }
        
        
        //原金额
@@ -1877,9 +2040,10 @@
        BigDecimal couponDiscountAmount = order.getCouponDiscountAmount();
        if(null != couponDiscountAmount && couponDiscountAmount.compareTo(BigDecimal.ZERO) > 0){
            List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, order.getId()));
            BigDecimal reduce = list.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
            for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list) {
                BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice();
                BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(periodServicePrice_total, new MathContext(4, RoundingMode.HALF_EVEN)));
                BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(reduce, new MathContext(4, RoundingMode.HALF_EVEN)));
                periodServicePrice = periodServicePrice.subtract(multiply);
                chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice);
                chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply);
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java
@@ -218,6 +218,8 @@
                BigDecimal payMoney = tChargingOrder.getStatus() < 4 ? tChargingOrder.getRechargeAmount() : tChargingOrder.getPaymentAmount();
                myChargingOrderList.setPayMoney(payMoney);
                myChargingOrderList.setCreateTime(tChargingOrder.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss")));
                myChargingOrderList.setElectricCharge(tChargingOrder.getElectrovalence());
                myChargingOrderList.setServiceCharge(tChargingOrder.getServiceCharge());
                chargingOrder.add(myChargingOrderList);
            }
            myOrderInvoiceInfo.setChargingOrder(chargingOrder);