Pu Zhibing
2025-11-13 8ca33caf9f4c2bef4c6775d7d9eb7002673110b5
增加退款金额超出剩余金额的逻辑
5个文件已修改
108 ■■■■■ 已修改文件
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-jianguan/src/main/resources/bootstrap.yml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/mongodb/service/UploadRealTimeMonitoringDataService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
@@ -173,6 +173,10 @@
    @ApiOperation(value = "选择车辆列表", tags = {"小程序-扫一扫"})
    @PostMapping(value = "/scan/carList")
    public R<List<TAppUserCar>> carList() {
        String token = SecurityUtils.getToken(ServletUtils.getRequest());
        if(!StringUtils.hasLength(token)){
            return R.ok(new ArrayList<>());
        }
        List<TAppUserCar> appUserId = appUserCarService.list(new QueryWrapper<TAppUserCar>()
                .eq("app_user_id",tokenService.getLoginUserApplet().getUserId()));
        appUserId.forEach(s->s.setId_(s.getId().toString()));
ruoyi-service/ruoyi-jianguan/src/main/resources/bootstrap.yml
@@ -57,14 +57,14 @@
        service: ${spring.application.name}
        group: DEFAULT_GROUP
        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
        username: nacos
        password: nacos
        username: mxcd
        password: Mxdlcdz@#2024&
      config:
        # 配置中心地址
        server-addr: 192.168.0.137:8848,192.168.0.123:8848
        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
        username: nacos
        password: nacos
        username: mxcd
        password: Mxdlcdz@#2024&
        group: DEFAULT_GROUP
        name: ${spring.application.name}
        # 配置文件格式
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -1804,7 +1804,11 @@
        PageInfo<ChargingOrderListVO> pageInfo = new PageInfo<>(dto.getPageCurr(), dto.getPageSize());
        List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
        List<Site> sites = siteClient.getSiteAll().getData();
        List<Long> collect1 = list.stream().map(ChargingOrderListVO::getId).collect(Collectors.toList());
        if(collect1.isEmpty()){
            collect1.add(-1L);
        }
        List<TChargingOrderAccountingStrategy> chargingOrderAccountingStrategies = chargingOrderAccountingStrategyService.list();
        for (ChargingOrderListVO chargingOrderListVO : list) {
            if (roleType == 2) {
                List<Boolean> data = partnerClient.getChargingListMenu(sysUser.getObjectId(), chargingOrderListVO.getSiteId()).getData();
@@ -1840,21 +1844,13 @@
            }
            // 获取开始SOC 结束soc
            if (chargingOrderListVO.getCode() != null) {
                List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrderListVO.getCode());
                if (data6 != null && !data6.isEmpty()) {
                    int min = 100;
                    int max = 0;
                    for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data6) {
                        if (uploadRealTimeMonitoringData.getSoc() > max) {
                            max = uploadRealTimeMonitoringData.getSoc();
                        }
                        if (uploadRealTimeMonitoringData.getSoc() != 0 && uploadRealTimeMonitoringData.getSoc() < min) {
                            min = uploadRealTimeMonitoringData.getSoc();
                        }
                    }
                    chargingOrderListVO.setEndSoc(max + "");
                    chargingOrderListVO.setStartSoc(min + "");
                UploadRealTimeMonitoringData asc = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrderListVO.getCode(), "asc");
                UploadRealTimeMonitoringData desc = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrderListVO.getCode(), "desc");
                if(null != asc){
                    chargingOrderListVO.setStartSoc(asc.getSoc().toString());
                }
                if(null != desc){
                    chargingOrderListVO.setEndSoc(desc.getSoc().toString());
                }
            }
            
@@ -1876,8 +1872,7 @@
                    chargingOrderListVO.setPhone(data3.getPhone());
                }
            }
            List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategyService.lambdaQuery()
                    .eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrderListVO.getId()).list();
            List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(s->s.getChargingOrderId().equals(chargingOrderListVO.getId())).collect(Collectors.toList());
            // 尖峰平谷充电量 度数
            BigDecimal jian = new BigDecimal("0");
            BigDecimal feng = new BigDecimal("0");
@@ -1925,6 +1920,9 @@
                chargingOrderListVO.setSharingAmount(new BigDecimal("0"));
            }
        }
        // 不分页
        PageInfo<ChargingOrderListVO> pageInfo1 = new PageInfo<>(1, 999999999);
        List<ChargingOrderListVO> list1 = this.baseMapper.chargingList(pageInfo1, dto, startTime1, startTime2, endTime1, endTime2);
@@ -1975,7 +1973,6 @@
        BigDecimal feng = new BigDecimal("0");
        BigDecimal ping = new BigDecimal("0");
        BigDecimal gu = new BigDecimal("0");
        List<TChargingOrderAccountingStrategy> chargingOrderAccountingStrategies = chargingOrderAccountingStrategyService.list();
        for (ChargingOrderListVO chargingOrderListVO : list1) {
            List<TChargingOrderAccountingStrategy> collect = chargingOrderAccountingStrategies.stream().filter(s -> s.getChargingOrderId().equals(chargingOrderListVO.getId())).collect(Collectors.toList());
            BigDecimal periodServicePrice = collect.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -1991,9 +1988,7 @@
                paymentAmount = paymentAmount.add(periodElectricPrice).add(periodServicePrice);
            }
            if (!chargingOrderListVO.getOrderSource().equals(2)) {
                List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderListVO.getId()))
                        .collect(Collectors.toList());
                for (TChargingOrderAccountingStrategy temp : list2) {
                for (TChargingOrderAccountingStrategy temp : collect) {
                    switch (temp.getType()) {
                        case 1:
                            jian = jian.add(temp.getChargingCapacity());
@@ -2018,9 +2013,7 @@
                    }
                }
            } else {
                List<TChargingOrderAccountingStrategy> list2 = chargingOrderAccountingStrategies.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderListVO.getId()))
                        .collect(Collectors.toList());
                for (TChargingOrderAccountingStrategy temp : list2) {
                for (TChargingOrderAccountingStrategy temp : collect) {
                    BigDecimal multiply = temp.getPeriodServicePrice().multiply(new BigDecimal("0.8"));
                    switch (temp.getType()) {
                        case 1:
@@ -2684,15 +2677,14 @@
                
                //开始构建退款费用
                refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN);
                Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
                if (refundAmount.compareTo(BigDecimal.ZERO) > 0) {
                    Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
                    //构建退款明细
                    TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
                    chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
                    chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
                    chargingOrderRefund.setRefundAmount(refundAmount);
                    chargingOrderRefund.setRefundStatus(1);
                    chargingOrderRefund.setPayType(rechargePaymentType);
                    chargingOrderRefund.setRefundStatus(1);
                    chargingOrderRefund.setCode(chargingOrder.getCode());
@@ -2748,6 +2740,28 @@
                            this.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
                        }
                    }
                }else{
                    //构建退款明细
                    TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
                    chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
                    chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
                    chargingOrderRefund.setRefundAmount(refundAmount);
                    chargingOrderRefund.setRefundStatus(2);
                    chargingOrderRefund.setPayType(rechargePaymentType);
                    chargingOrderRefund.setCode(chargingOrder.getCode());
                    chargingOrderRefund.setRefundTitle("充电完成退款");
                    chargingOrderRefund.setRefundContent("充电完成退款");
                    chargingOrderRefund.setRefundReason("充电完成退款");
                    chargingOrderRefund.setRefundRemark("实际充电消费金额:" + chargingOrder.getPaymentAmount());
                    chargingOrderRefund.setRefundTotalAmount(refundAmount);
                    chargingOrderRefund.setPayAmount(rechargeAmount);
                    chargingOrderRefund.setRefundTime(LocalDateTime.now());
                    chargingOrderRefundService.save(chargingOrderRefund);
                    chargingOrder.setRefundStatus(2);
                    chargingOrder.setRefundTime(LocalDateTime.now());
                    this.updateById(chargingOrder);
                }
            }
            
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/mongodb/service/UploadRealTimeMonitoringDataService.java
@@ -16,6 +16,18 @@
     * @return
     */
    List<UploadRealTimeMonitoringData> getDataByOrderCode(String code);
    /**
     * 查询数据,排序
     * @param code
     * @param sort
     * @return
     */
    UploadRealTimeMonitoringData getDataByOrderCode(String code, String sort);
    UploadRealTimeMonitoringPageData getDataAll(MongoChargingOrderQuery mongoChargingOrderQuery) throws ParseException;
    /**
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java
@@ -60,6 +60,22 @@
        return uploadRealTimeMonitoringData;
    }
    @Override
    public UploadRealTimeMonitoringData getDataByOrderCode(String code, String sort) {
        Query query = new Query();
        if(StringUtils.isNotEmpty(code)){
            query = query.addCriteria(Criteria.where("transaction_serial_number").is(code));
        }
        if("asc".equals(sort)){
            query = query.with(Sort.by(Sort.Order.asc("create_time")));
        }else{
            query = query.with(Sort.by(Sort.Order.desc("create_time")));
        }
        query = query.limit(1);
        return mongoTemplate.findOne(query, UploadRealTimeMonitoringData.class);
    }
    @Override
    public UploadRealTimeMonitoringPageData getDataAll(MongoChargingOrderQuery mongoChargingOrderQuery) throws ParseException {
        Query query = new Query();