Pu Zhibing
2024-10-17 11291e5cb187703b26f29090c466d5c702e74cf1
Merge remote-tracking branch 'origin/master'
14个文件已修改
305 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TActivityStatisticslVO.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TActivityVO.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java 130 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderAccountingStrategyServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingBillMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java
@@ -7,6 +7,8 @@
import org.springframework.data.mongodb.core.mapping.Document;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * 上传实时监测数据
@@ -45,6 +47,11 @@
    private BigDecimal period_charging_degree;// @ApiModelProperty("时段充电度数")
    private Integer orderType; //1=充电订单(小程序),2=充电订单(刷卡))
    private Integer siteId;
    private Integer status; //状态(0=未知,1=等待中/已插枪,2=启动中,3=充电中,4=停止中,5=已结束)"
    private Date startTime; //充电开始时间
    private Date endTime; //充电结束时间
}
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java
@@ -56,7 +56,7 @@
     * @return
     */
    @PostMapping(value = "/t-exchange-order/activityStatistics")
    public R<TActivityVO> activityStatistics(@RequestBody TActivityStatisticsQuery dto);
    R<TActivityVO> activityStatistics(@RequestBody TActivityStatisticsQuery dto);
    @PostMapping(value = "/chargingBill/accountBillList")
    @ApiOperation(value = "列表查询", tags = {"管理后台-账户结算账单"})
    R<AccountListVO> accountBillList(@RequestBody ChargingListQuery dto);
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TActivityStatisticslVO.java
@@ -1,5 +1,6 @@
package com.ruoyi.order.api.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.ser.Serializers;
import com.ruoyi.common.core.web.domain.BasePojo;
import com.ruoyi.order.api.model.*;
@@ -8,6 +9,7 @@
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@ApiModel(value = "管理后台活动费用统计分页列表", description = "管理后台活动费用统计分页列表")
@@ -33,16 +35,17 @@
    @ApiModelProperty(value = "实付")
    private BigDecimal paymentAmount;
    @ApiModelProperty(value = "消费时间")
    private String time;
    @ApiModelProperty(value = "消费时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private LocalDateTime time;
    @ApiModelProperty(value = "总计优惠")
    private BigDecimal total;
    @ApiModelProperty(value = "消费时间")
    @ApiModelProperty(value = "优惠券优惠")
    private BigDecimal coupon;
    @ApiModelProperty(value = "消费时间")
    @ApiModelProperty(value = "会员抵扣")
    private BigDecimal discount;
    @ApiModelProperty(value = "消费时间")
    @ApiModelProperty(value = "会员活动")
    private BigDecimal vipActivity;
    @ApiModelProperty(value = "消费时间")
    @ApiModelProperty(value = "赠送会员")
    private BigDecimal grantVip;
}
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TActivityVO.java
@@ -7,7 +7,6 @@
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel(value = "TOrderAppealVO对象", description = "订单申诉VO对象")
public class TActivityVO  {
ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
@@ -12,7 +12,6 @@
  profiles:
    # 环境配置
    active: dev
#    active: prod
---
spring:
  config:
@@ -55,7 +54,7 @@
    type: nacos
    nacos:
      # 开发环境
      server-addr: 192.168.110.169:8848
      server-addr: 127.0.0.1:8848
      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
      group: DEFAULT_GROUP
      data-id: seata-server.properties
@@ -73,7 +72,7 @@
    nacos:
      application: seata-server
      # 开发环境
      server-addr: 192.168.110.169:8848
      server-addr: 127.0.0.1:8848
      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
      group: DEFAULT_GROUP
      username: nacos
@@ -88,7 +87,7 @@
    nacos:
      discovery:
        # 开发环境
        server-addr: 192.168.110.169:8848 # nacos注册中心地址
        server-addr: 127.0.0.1:8848 # nacos注册中心地址
        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
        group: DEFAULT_GROUP
        application: seata-server #Nacos 中 Seata 名称
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -320,7 +320,7 @@
    public ChargeMonitoring chargeMonitoring(Integer siteId) {
        //获取当前登录账户的站点权限数据
        Set<Integer> siteIds = new HashSet<>();
        if(null == siteId){
        if(0 == siteId){
            SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
            Integer roleType = sysUser.getRoleType();
            Integer objectId = sysUser.getObjectId();
@@ -334,12 +334,20 @@
                    List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData();
                    data.addAll(data1);
                    siteIds = new HashSet<>(data);
                }else{
                    siteIds = null;
                }
            }
        }else{
            siteIds.add(siteId);
        }
        List<Site> sites = siteService.listByIds(siteIds);
        List<Site> sites = null;
        if(null == siteIds){
            sites = siteService.list(new LambdaQueryWrapper<Site>().eq(Site::getDelFlag, 0));
            siteIds = sites.stream().map(Site::getId).collect(Collectors.toSet());
        }else{
            sites = siteService.listByIds(siteIds);
        }
        List<TChargingGun> total = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getSiteId, siteIds).eq(TChargingGun::getDelFlag, 0));
        List<TChargingGun> charging = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getSiteId, siteIds).eq(TChargingGun::getStatus, 4).eq(TChargingGun::getDelFlag, 0));
        BigDecimal ratedPower = total.stream().map(TChargingGun::getRatedPower).reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -361,9 +369,9 @@
        }
        List<String> dates = new ArrayList<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MMM-dd");
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        for (int i = 6; i >= 0; i--) {
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - i);
            dates.add(sdf.format(calendar.getTime()));
        }
@@ -382,7 +390,7 @@
            if(list.size() == 0){
                value2.add(0D);
            }else{
                Double datum1 = new BigDecimal(datum).divide(new BigDecimal(list.size()).multiply(v).multiply(new BigDecimal(24))).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
                Double datum1 = new BigDecimal(datum).divide(new BigDecimal(list.size()).multiply(v).multiply(new BigDecimal(24)), new MathContext(4, RoundingMode.HALF_EVEN)).multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
                value2.add(datum1);
            }
        }
@@ -404,7 +412,7 @@
    public ChargingGunCountMonitoring getChargingGunCountMonitoring(Integer siteId) {
        //获取当前登录账户的站点权限数据
        Set<Integer> siteIds = new HashSet<>();
        if(null == siteId){
        if(0 == siteId){
            SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
            Integer roleType = sysUser.getRoleType();
            Integer objectId = sysUser.getObjectId();
@@ -418,6 +426,9 @@
                    List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData();
                    data.addAll(data1);
                    siteIds = new HashSet<>(data);
                }else{
                    List<Site> list = siteService.list(new LambdaQueryWrapper<Site>().eq(Site::getDelFlag, 0));
                    siteIds = list.stream().map(Site::getId).collect(Collectors.toSet());
                }
            }
        }else{
@@ -452,7 +463,7 @@
    public PageInfo<ChargingGunMonitoring> getChargingGunMonitoring(GetChargingGunMonitoring query) {
        //获取当前登录账户的站点权限数据
        Set<Integer> siteIds = new HashSet<>();
        if(null == query.getSiteId()){
        if(0 == query.getSiteId()){
            SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
            Integer roleType = sysUser.getRoleType();
            Integer objectId = sysUser.getObjectId();
@@ -466,6 +477,9 @@
                    List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData();
                    data.addAll(data1);
                    siteIds = new HashSet<>(data);
                }else{
                    List<Site> list = siteService.list(new LambdaQueryWrapper<Site>().eq(Site::getDelFlag, 0));
                    siteIds = list.stream().map(Site::getId).collect(Collectors.toSet());
                }
            }
        }else{
@@ -489,62 +503,60 @@
                Integer id = gunMonitoring.getId();
                //根据订单数据查询车牌号
                TChargingOrder chargingOrder = chargingOrderClient.getOrderDetailByGunId(id).getData();
                Long appUserCarId = chargingOrder.getAppUserCarId();
                if(null != appUserCarId){
                if(null != chargingOrder){
                    Long appUserCarId = chargingOrder.getAppUserCarId();
                    TAppUserCar tAppUserCar = appUserCarClient.getCarByIds(Arrays.asList(appUserCarId)).getData().get(0);
                    gunMonitoring.setLicensePlate(tAppUserCar.getLicensePlate());
                }
                UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrder.getCode()).getData();
                gunMonitoring.setChargingRatio(BigDecimal.valueOf(data.getSoc()));
                gunMonitoring.setElectricQuantity(data.getCharging_degree().toString());
                gunMonitoring.setSoc(data.getSoc().toString());
                gunMonitoring.setElectricCurrent(data.getOutput_current().toString());
                gunMonitoring.setVoltage(data.getOutput_voltage().toString());
                switch (data.getHardware_fault()){
                    case 1:
                        gunMonitoring.setFaultCause("急停按钮动作故障");
                        break;
                    case 2:
                        gunMonitoring.setFaultCause("无可用整流模块");
                        break;
                    case 3:
                        gunMonitoring.setFaultCause("出风口温度过高");
                        break;
                    case 4:
                        gunMonitoring.setFaultCause("交流防雷故障");
                        break;
                    case 5:
                        gunMonitoring.setFaultCause("交直流模块 DC20 通信中断");
                        break;
                    case 6:
                        gunMonitoring.setFaultCause("绝缘检测模块 FC08 通信中断");
                        break;
                    case 7:
                        gunMonitoring.setFaultCause("电度表通信中断");
                        break;
                    case 8:
                        gunMonitoring.setFaultCause("读卡器通信中断");
                        break;
                    case 9:
                        gunMonitoring.setFaultCause("RC10 通信中断");
                        break;
                    case 10:
                        gunMonitoring.setFaultCause("风扇调速板故障");
                        break;
                    case 11:
                        gunMonitoring.setFaultCause("直流熔断器故障");
                        break;
                    case 12:
                        gunMonitoring.setFaultCause("高压接触器故障");
                        break;
                    case 13:
                        gunMonitoring.setFaultCause("门打开");
                        break;
                    UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrder.getCode()).getData();
                    gunMonitoring.setChargingRatio(BigDecimal.valueOf(data.getSoc()));
                    gunMonitoring.setElectricQuantity(data.getCharging_degree().toString());
                    gunMonitoring.setSoc(data.getSoc().toString());
                    gunMonitoring.setElectricCurrent(data.getOutput_current().toString());
                    gunMonitoring.setVoltage(data.getOutput_voltage().toString());
                    switch (data.getHardware_fault()){
                        case 1:
                            gunMonitoring.setFaultCause("急停按钮动作故障");
                            break;
                        case 2:
                            gunMonitoring.setFaultCause("无可用整流模块");
                            break;
                        case 3:
                            gunMonitoring.setFaultCause("出风口温度过高");
                            break;
                        case 4:
                            gunMonitoring.setFaultCause("交流防雷故障");
                            break;
                        case 5:
                            gunMonitoring.setFaultCause("交直流模块 DC20 通信中断");
                            break;
                        case 6:
                            gunMonitoring.setFaultCause("绝缘检测模块 FC08 通信中断");
                            break;
                        case 7:
                            gunMonitoring.setFaultCause("电度表通信中断");
                            break;
                        case 8:
                            gunMonitoring.setFaultCause("读卡器通信中断");
                            break;
                        case 9:
                            gunMonitoring.setFaultCause("RC10 通信中断");
                            break;
                        case 10:
                            gunMonitoring.setFaultCause("风扇调速板故障");
                            break;
                        case 11:
                            gunMonitoring.setFaultCause("直流熔断器故障");
                            break;
                        case 12:
                            gunMonitoring.setFaultCause("高压接触器故障");
                            break;
                        case 13:
                            gunMonitoring.setFaultCause("门打开");
                            break;
                    }
                }
            }
        }
        return pageInfo.setRecords(chargingGunMonitoring);
    }
ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml
@@ -13,7 +13,6 @@
  profiles:
    # 环境配置
    active: dev
#    active: prod
---
spring:
  config:
@@ -47,7 +46,7 @@
  enabled: true
  application-id: ${spring.application.name}
  tx-service-group: seata_tx_group    #此处配置自定义的seata事务分组名称
  enable-auto-data-source-proxy: false
  enable-auto-data-source-proxy: true
  service:
    vgroup-mapping:
      seata_tx_group: default
@@ -56,7 +55,7 @@
    type: nacos
    nacos:
      # 开发环境
      server-addr: 192.168.110.169:8848
      server-addr: 127.0.0.1:8848
      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
      group: DEFAULT_GROUP
      data-id: seata-server.properties
@@ -74,7 +73,7 @@
    nacos:
      application: seata-server
      # 开发环境
      server-addr: 192.168.110.169:8848
      server-addr: 127.0.0.1:8848
      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
      group: DEFAULT_GROUP
      username: nacos
@@ -89,7 +88,7 @@
    nacos:
      discovery:
        # 开发环境
        server-addr: 192.168.110.169:8848 # nacos注册中心地址
        server-addr: 127.0.0.1:8848 # nacos注册中心地址
        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
        group: DEFAULT_GROUP
        application: seata-server #Nacos 中 Seata 名称
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderAccountingStrategyServiceImpl.java
@@ -13,8 +13,10 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.LongStream;
@@ -43,19 +45,20 @@
    @Override
    public List<List<Map<String, Object>>> getTotalElectricQuantity(Integer days, Set<Integer> siteIds) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        DateTimeFormatter sdf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - days);
        String startTime = sdf.format(calendar.getTime()) + " 00:00:00";
        List<TChargingOrder> list = chargingOrderService.list(new LambdaQueryWrapper<TChargingOrder>().in(TChargingOrder::getSiteId, siteIds).eq(TChargingOrder::getStatus, 5)
                .eq(TChargingOrder::getDelFlag, 0).last(" and end_time between '" + startTime + "' and DATE_FORMAT('%Y-%m-%d %H:%i:%s', now())"));
                .eq(TChargingOrder::getDelFlag, 0).last(" and start_time between '" + startTime + "' and DATE_FORMAT(now(), '%Y-%m-%d %H:%i:%s')"));
        List<Long> orderId = list.stream().map(TChargingOrder::getId).collect(Collectors.toList());
        List<TChargingOrderAccountingStrategy> list1 = this.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().in(TChargingOrderAccountingStrategy::getChargingOrderId, orderId));
        
        List<List<Map<String, Object>>> list2 = new ArrayList<>();
        Calendar nowDateTime = Calendar.getInstance();
        for (int i = days; i >= 0; i--) {
            Calendar nowDateTime = Calendar.getInstance();
            nowDateTime.set(Calendar.DAY_OF_YEAR, nowDateTime.get(Calendar.DAY_OF_YEAR) - i);
            List<TChargingOrder> collect = list.stream().filter(s -> sdf.format(s.getEndTime()).equals(sdf.format(nowDateTime.getTime()))).collect(Collectors.toList());
            List<TChargingOrder> collect = list.stream().filter(s -> s.getStartTime().format(sdf1).equals(sdf.format(nowDateTime.getTime()))).collect(Collectors.toList());
            List<Long> orderIds = collect.stream().map(TChargingOrder::getId).collect(Collectors.toList());
            
            
@@ -105,15 +108,15 @@
        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - days);
        String startTime = sdf.format(calendar.getTime()) + " 00:00:00";
        List<TChargingOrder> list = chargingOrderService.list(new LambdaQueryWrapper<TChargingOrder>().in(TChargingOrder::getSiteId, siteIds).eq(TChargingOrder::getStatus, 5)
                .eq(TChargingOrder::getDelFlag, 0).last(" and end_time between '" + startTime + "' and DATE_FORMAT('%Y-%m-%d %H:%i:%s', now())"));
                .eq(TChargingOrder::getDelFlag, 0).last(" and start_time between '" + startTime + "' and DATE_FORMAT(now(), '%Y-%m-%d %H:%i:%s')"));
        
        List<Double> list2 = new ArrayList<>();
        Calendar nowDateTime = Calendar.getInstance();
        //遍历获取每天的数值
        for (int i = days; i >= 0; i--) {
            Calendar nowDateTime = Calendar.getInstance();
            nowDateTime.set(Calendar.DAY_OF_YEAR, nowDateTime.get(Calendar.DAY_OF_YEAR) - i);
            //充电量
            BigDecimal reduce = list.stream().filter(s -> sdf.format(s.getEndTime()).equals(sdf.format(nowDateTime.getTime())))
            BigDecimal reduce = list.stream().filter(s -> s.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")).equals(sdf.format(nowDateTime.getTime())))
                    .map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
            list2.add(reduce.doubleValue());
        }
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -294,7 +294,7 @@
            myChargingOrderInfo.setCurrentAndVoltage(currentAndVoltage);
            //在MongoDB中获取数据
            List<Integer> soc = dataList.stream().map(UploadRealTimeMonitoringData::getSoc).collect(Collectors.toList());
            List<BigDecimal> po = dataList.stream().map(s -> s.getOutput_current().multiply(s.getOutput_voltage()).divide(new BigDecimal(1000))).collect(Collectors.toList());
            List<BigDecimal> po = dataList.stream().map(s -> s.getOutput_current().multiply(s.getOutput_voltage()).divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)).collect(Collectors.toList());
            List<Map<String, Object>> power = new ArrayList<>();
            for (int i = 0; i < time.size(); i++) {
                Map<String, Object> map = new HashMap<>();
@@ -2460,9 +2460,13 @@
            if (!data1.isEmpty()){
                tSettlementConfirm.setSiteName(data1.get(0).getName());
            }
            meteringElectronic = meteringElectronic.add(tSettlementConfirm.getMeteringElectronic());
            chargingElectronic = chargingElectronic.add(tSettlementConfirm.getChargingElectronic());
            lossElectronic = lossElectronic.add(tSettlementConfirm.getLossElectronic());
            if (tSettlementConfirm.getMeteringElectronic()!=null){
                meteringElectronic = meteringElectronic.add(tSettlementConfirm.getMeteringElectronic());
                chargingElectronic = chargingElectronic.add(tSettlementConfirm.getChargingElectronic());
            }
            if (tSettlementConfirm.getLossElectronic()!=null){
                lossElectronic = lossElectronic.add(tSettlementConfirm.getLossElectronic());
            }
            income = income.add(tSettlementConfirm.getIncome());
            venue = venue.add(tSettlementConfirm.getVenue());
            metering = metering.add(tSettlementConfirm.getMetering());
@@ -2526,13 +2530,22 @@
                settlementConfirm.setIncome(settlementConfirm.getElectrovalence().add(settlementConfirm.getServiceCharge()));
                if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())){
                    // 电站相同比较收入涨幅跌幅
                    BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome()).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
                    tSettlementConfirm.setIncomePercentage(subtract+"%");
                    if (tSettlementConfirm.getIncome().compareTo(BigDecimal.ZERO)>0){
                        BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome()).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
                        tSettlementConfirm.setIncomePercentage(subtract+"%");
                    }else {
                        tSettlementConfirm.setIncomePercentage("100"+"%");
                    }
                    // 比较总利润 收入合计-成本合计
                    BigDecimal subtract1 = tSettlementConfirm.getIncome().subtract(tSettlementConfirm.getCost());
                    BigDecimal subtract2 = settlementConfirm.getIncome().subtract(settlementConfirm.getCost());
                    tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
                }
                    BigDecimal bigDecimal1 = subtract1.subtract(subtract2)
                            .divide(subtract2, 2, RoundingMode.HALF_DOWN)
                            .multiply(new BigDecimal("100"))
                            .setScale(2, RoundingMode.HALF_DOWN);
                    tSettlementConfirm.setTotalPercentage(bigDecimal1+"%");                }
                beforeCost = beforeCost.add(settlementConfirm.getCost());
                beforeIncome = beforeIncome.add(settlementConfirm.getIncome());
@@ -2582,7 +2595,7 @@
        if (subtract2.compareTo(new BigDecimal("0")) == 0){
            tSettlementConfirm.setTotalPercentage(0+"%");
        }else{
            tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
            tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2,2, RoundingMode.HALF_DOWN).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
        }
        tSettlementConfirm.setElectronicRefund(0);
        // 查询上次汇报数据 进行比对涨幅跌幅
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
@@ -127,15 +127,15 @@
                        coupon = coupon.add(tActivityStatisticslVO.getCouponDiscountAmount());
                        stringBuilder.append("优惠券抵扣").append("+");
                }
                    if (tActivityStatisticslVO.getVipDiscountAmount()!=null
                            &&
                            (tActivityStatisticslVO.getCouponDiscountAmount().compareTo(BigDecimal.ZERO)>0)){
                    if (tActivityStatisticslVO.getVipDiscountAmount()!=null &&(tActivityStatisticslVO.getVipDiscountAmount().compareTo(BigDecimal.ZERO)>0)){
                        discount = discount.add(tActivityStatisticslVO.getVipDiscountAmount());
                        stringBuilder.append("会员抵扣").append("+");
                    }
                    stringBuilder.deleteCharAt(stringBuilder.length()-1);
                    tActivityStatisticslVO.setType(stringBuilder.toString());
                    tActivityStatisticslVO.setTime(simpleDateFormat.format(tActivityStatisticslVO.getCreateTime()));
                    if (stringBuilder.length()>0){
                        stringBuilder.deleteCharAt(stringBuilder.length()-1);
                        tActivityStatisticslVO.setType(stringBuilder.toString());
                    }
                    tActivityStatisticslVO.setTime(tActivityStatisticslVO.getCreateTime());
                    break;
                case 2:
                    StringBuilder stringBuilder1 = new StringBuilder();
@@ -155,7 +155,7 @@
                    }
                    stringBuilder1.deleteCharAt(stringBuilder1.length()-1);
                    tActivityStatisticslVO.setType(stringBuilder1.toString());
                    tActivityStatisticslVO.setTime(simpleDateFormat.format(tActivityStatisticslVO.getCreateTime()));
                    tActivityStatisticslVO.setTime(tActivityStatisticslVO.getCreateTime());
                    break;
                case 3:
                    // 会员订单 优惠金额大于0
@@ -165,19 +165,19 @@
                        vipActivity = vipActivity.add(tActivityStatisticslVO.getVipDiscountAmount());
                    }
                    tActivityStatisticslVO.setType("会员活动");
                    tActivityStatisticslVO.setTime(simpleDateFormat.format(tActivityStatisticslVO.getCreateTime()));
                    tActivityStatisticslVO.setTime(tActivityStatisticslVO.getCreateTime());
                    break;
                case 4:
                    // 赠送会员订单 如果支付金额为0 那么就是后台赠送的会员
                    if (tActivityStatisticslVO.getPaymentAmount().compareTo(BigDecimal.ZERO)==0){
                        grantVip = grantVip.add(tActivityStatisticslVO.getOrderAmount());
                        tActivityStatisticslVO.setType("赠送会员");
                        tActivityStatisticslVO.setTime(simpleDateFormat.format(tActivityStatisticslVO.getCreateTime()));
                        tActivityStatisticslVO.setTime(tActivityStatisticslVO.getCreateTime());
                    }else{
                        // 赠送
                        grantVip = grantVip.add(tActivityStatisticslVO.getVipDiscountAmount());
                        tActivityStatisticslVO.setType("赠送会员");
                        tActivityStatisticslVO.setTime(simpleDateFormat.format(tActivityStatisticslVO.getCreateTime()));
                        tActivityStatisticslVO.setTime(tActivityStatisticslVO.getCreateTime());
                    }
                    break;
            }
ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml
@@ -29,7 +29,6 @@
        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
        username: nacos
        password: nacos
#        ip: 192.168.110.85
      config:
        # 配置中心地址
        server-addr: 192.168.110.169:8848
@@ -57,7 +56,7 @@
    type: nacos
    nacos:
      # 开发环境
      server-addr: 192.168.110.169:8848
      server-addr: 127.0.0.1:8848
      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
      group: DEFAULT_GROUP
      data-id: seata-server.properties
@@ -75,7 +74,7 @@
    nacos:
      application: seata-server
      # 开发环境
      server-addr: 192.168.110.169:8848
      server-addr: 127.0.0.1:8848
      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
      group: DEFAULT_GROUP
      username: nacos
@@ -90,7 +89,7 @@
    nacos:
      discovery:
        # 开发环境
        server-addr: 192.168.110.169:8848 # nacos注册中心地址
        server-addr: 127.0.0.1:8848 # nacos注册中心地址
        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
        group: DEFAULT_GROUP
        application: seata-server #Nacos 中 Seata 名称
@@ -122,6 +121,7 @@
        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
        username: nacos
        password: nacos
        ip: 192.168.110.111
      config:
        # 配置中心地址
        server-addr: 192.168.0.137:8848,192.168.0.123:8848
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingBillMapper.xml
@@ -6,7 +6,7 @@
    <select id="chargingBillList" resultType="com.ruoyi.order.api.vo.ChargingBillListVO">
    select t1.* from t_charging_bill t1
    where 1=1
        <if test="req.type != null ">
        <if test="req.type != null and req.type!=0">
            and t1.type = #{req.type}
        </if>
      <if test="req.state != null ">
ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml
@@ -29,7 +29,6 @@
        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
        username: nacos
        password: nacos
#        ip: 192.168.110.85
      config:
        # 配置中心地址
        server-addr: 192.168.110.169:8848
@@ -57,7 +56,7 @@
    type: nacos
    nacos:
      # 开发环境
      server-addr: 192.168.110.169:8848
      server-addr: 127.0.0.1:8848
      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
      group: DEFAULT_GROUP
      data-id: seata-server.properties
@@ -75,7 +74,7 @@
    nacos:
      application: seata-server
      # 开发环境
      server-addr: 192.168.110.169:8848
      server-addr: 127.0.0.1:8848
      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
      group: DEFAULT_GROUP
      username: nacos
@@ -90,7 +89,7 @@
    nacos:
      discovery:
        # 开发环境
        server-addr: 192.168.110.169:8848 # nacos注册中心地址
        server-addr: 127.0.0.1:8848 # nacos注册中心地址
        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
        group: DEFAULT_GROUP
        application: seata-server #Nacos 中 Seata 名称
ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml
@@ -1,7 +1,3 @@
server:
  port: 9500
  tomcat:
    basedir: /data/tomcat
# Spring
spring:
  application:
@@ -13,7 +9,6 @@
  profiles:
    # 环境配置
    active: dev
#    active: prod
---
spring:
  config:
@@ -42,7 +37,10 @@
        # 共享配置
        shared-configs:
          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
---
seata:
  enabled: true
  application-id: ${spring.application.name}
@@ -55,57 +53,36 @@
  config:
    type: nacos
    nacos:
      # 开发环境
      server-addr: 192.168.110.169:8848
      server-addr: 127.0.0.1:8848
      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
      group: DEFAULT_GROUP
      data-id: seata-server.properties
      username: nacos
      password: nacos
      # 生产环境
#      server-addr: 192.168.0.137:8848,192.168.0.123:8848
#      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
#      group: DEFAULT_GROUP
#      data-id: seata-server.properties
#      username: nacos
#      password: nacos
  registry:
    type: nacos
    nacos:
      application: seata-server
      # 开发环境
      server-addr: 192.168.110.169:8848
      server-addr: 127.0.0.1:8848
      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
      group: DEFAULT_GROUP
      username: nacos
      password: nacos
      # 生产环境
#      server-addr: 192.168.0.137:8848,192.168.0.123:8848
#      namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
#      group: DEFAULT_GROUP
#      username: nacos
#      password: nacos
  cloud:
    nacos:
      discovery:
        # 开发环境
        server-addr: 192.168.110.169:8848 # nacos注册中心地址
        server-addr: 127.0.0.1:8848 # nacos注册中心地址
        namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间
        group: DEFAULT_GROUP
        application: seata-server #Nacos 中 Seata 名称
        username: nacos
        password: nacos
        # 生产环境
#        server-addr: 192.168.0.137:8848,192.168.0.123:8848
#        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
#        group: DEFAULT_GROUP
#        application: seata-server #Nacos 中 Seata 名称
#        username: nacos
#        password: nacos
    sentinel:
      transport:
        dashboard: 127.0.0.1:8080  #  Sentinel控制台地址
      eager: true
---
spring:
  config:
@@ -115,18 +92,14 @@
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 192.168.0.137:8848,192.168.0.123:8848
        server-addr: 127.0.0.1:8848
        service: ${spring.application.name}
        group: DEFAULT_GROUP
        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
        username: nacos
        password: nacos
        namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2
      config:
        # 配置中心地址
        server-addr: 192.168.0.137:8848,192.168.0.123:8848
        namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a
        username: nacos
        password: nacos
        server-addr: 127.0.0.1:8848
        namespace: 3452d750-b08d-4485-a1e9-4fb0548f1fc2
        group: DEFAULT_GROUP
        name: ${spring.application.name}
        # 配置文件格式