Pu Zhibing
2024-10-17 9c4b38c6382b2a33d1716c962553ece34e4913f5
合并代码
3个文件已修改
107 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java
@@ -204,7 +204,7 @@
    private LocalDateTime refundTime;
    @ApiModelProperty(value = "总电量")
    @TableField("total_electricity")
    private BigDecimal totalElectricity;// 总电量
    private BigDecimal totalElectricity;
    @ApiModelProperty(value = "支付时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -72,6 +72,7 @@
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
@@ -260,8 +261,8 @@
        }else{
            myChargingOrderInfo.setLicensePlate("无");
        }
        myChargingOrderInfo.setStartTime(chargingOrder.getStartTime().toInstant(ZoneOffset.of("+8")).toEpochMilli());
        myChargingOrderInfo.setEndTime(chargingOrder.getEndTime().toInstant(ZoneOffset.of("+8")).toEpochMilli());
        myChargingOrderInfo.setStartTime(chargingOrder.getStartTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
        myChargingOrderInfo.setEndTime(chargingOrder.getEndTime().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond() * 1000);
        myChargingOrderInfo.setOrderAmount(chargingOrder.getOrderAmount());
        myChargingOrderInfo.setPaymentAmount(chargingOrder.getPaymentAmount());
        myChargingOrderInfo.setRechargeAmount(chargingOrder.getRechargeAmount());
@@ -306,7 +307,7 @@
            }
            myChargingOrderInfo.setPower(power);
        }
        myChargingOrderInfo.setActionable(myChargingOrderInfo.getEndTime() + 604800000L > System.currentTimeMillis() ? 0 : 1);
        myChargingOrderInfo.setActionable(myChargingOrderInfo.getEndTime() + 604800000L < System.currentTimeMillis() ? 0 : 1);
        return myChargingOrderInfo;
    }
    
@@ -1697,95 +1698,7 @@
        if(com.ruoyi.common.core.utils.StringUtils.isNotEmpty(query.getTransaction_serial_number())){
            //获取当前的计费策略
            TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, query.getTransaction_serial_number()));
            AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderClient.getNowAccountingStrategyDetailOrder(chargingOrder.getId()).getData();
            TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = chargingOrderAccountingStrategyService.getOne(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>()
                    .eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()).orderByDesc(TChargingOrderAccountingStrategy::getCreateTime).last(" limit 0, 1"));
            if(null == chargingOrderAccountingStrategy){
                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 charging_degree = query.getCharging_degree();
                BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(charging_degree);
                BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(charging_degree);
                BigDecimal serviceCharge = originalServicePrice;
                //计算优惠金额
                if(null != chargingOrder.getVipDiscount()){
                    serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount().divide(new BigDecimal(10)));
                }
                chargingOrderAccountingStrategy.setChargingCapacity(charging_degree);
                chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
                chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
                chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice);
                chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
                chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
            }else{
                if(chargingOrderAccountingStrategy.getAccountingStrategyDetailId().equals(strategyDetail.getId())){
                    //已充电总度数
                    BigDecimal charging_degree = query.getCharging_degree();
                    BigDecimal chargingCapacity = chargingOrderAccountingStrategy.getChargingCapacity();
                    //计算本阶段充电度数
                    BigDecimal subtract = charging_degree.subtract(chargingCapacity);
                    //计算本阶段费用
                    BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(subtract);
                    BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(subtract);
                    BigDecimal serviceCharge = originalServicePrice;
                    //计算优惠金额
                    if(null != chargingOrder.getVipDiscount()){
                        serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount().divide(new BigDecimal(10)));
                    }
                    //将本阶段的费用增加到总费用中
                    electrovalenc = electrovalenc.add(chargingOrderAccountingStrategy.getPeriodElectricPrice());
                    originalServicePrice = originalServicePrice.add(chargingOrderAccountingStrategy.getPeriodOriginalServicePrice());
                    serviceCharge = serviceCharge.add(chargingOrderAccountingStrategy.getPeriodServicePrice());
                    chargingOrderAccountingStrategy.setChargingCapacity(charging_degree);
                    chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
                    chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
                    chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice);
                    chargingOrderAccountingStrategy.setEndTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm")));
                    chargingOrderAccountingStrategyService.updateById(chargingOrderAccountingStrategy);
                }else{
                    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 charging_degree = query.getCharging_degree();
                    BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(charging_degree);
                    BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(charging_degree);
                    BigDecimal serviceCharge = originalServicePrice;
                    //计算优惠金额
                    if(null != chargingOrder.getVipDiscount()){
                        serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount().divide(new BigDecimal(10)));
                    }
                    chargingOrderAccountingStrategy.setChargingCapacity(charging_degree);
                    chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc);
                    chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge);
                    chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice);
                    chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
                    chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy);
                }
            }
            List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>()
                    .eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
            //总充电金额
            BigDecimal t = BigDecimal.ZERO;
            for (TChargingOrderAccountingStrategy coas : list) {
                t = t.add(coas.getPeriodServicePrice()).add(coas.getPeriodElectricPrice());
            }
            BigDecimal residualAmount = chargingOrder.getRechargeAmount().subtract(t).setScale(4, RoundingMode.HALF_EVEN);
            BigDecimal residualAmount = chargingOrder.getResidualAmount().add(chargingOrder.getVipDiscountAmount()).subtract(query.getPaid_amount());
            chargingOrder.setResidualAmount(residualAmount);
            if(query.getOutput_current().compareTo(BigDecimal.ZERO) != 0){
                BigDecimal divide = (query.getOutput_current().multiply(query.getOutput_voltage())).divide(new BigDecimal(1000));
@@ -2773,7 +2686,7 @@
        info.setEndDay(endTime.format(DateTimeFormatter.ofPattern("MM月dd日")) + " 周" + endTime.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.SIMPLIFIED_CHINESE));
        info.setEndHour(endTime.format(DateTimeFormatter.ofPattern("HH:mm")));
        int hour = endTime.getHour() - startTime.getHour();
        int second = endTime.getSecond() - startTime.getSecond();
        int second = endTime.getMinute() - startTime.getMinute();
        info.setDuration(0 == hour ? String.format("%s分钟", second) : String.format("%s小时%s分钟", hour, second));
        return info;
    }
ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java
@@ -1,6 +1,8 @@
package com.ruoyi.order;
import com.alibaba.fastjson2.JSON;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.order.dto.MyChargingOrderInfo;
import com.ruoyi.order.service.TChargingOrderService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@@ -17,7 +19,7 @@
    
    @Test
    public void test(){
        AjaxResult ajaxResult = chargingOrderService.chargingOrderCallback(2, "CD55720241011143234718", "4200002400202410113181486798", "");
        MyChargingOrderInfo myChargingOrderInfo = chargingOrderService.getMyChargingOrderInfo("1846484071567437825");
        System.err.println(JSON.toJSONString(myChargingOrderInfo));
    }
}