puzhibing
2025-02-05 74b0e0814e37d640596f44ec86d20fa9ecce9ed6
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java
@@ -4,13 +4,18 @@
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.model.TAppUser;
import com.ruoyi.account.api.model.TAppUserCar;
import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
import com.ruoyi.chargingPile.api.feignClient.PartnerClient;
import com.ruoyi.chargingPile.api.feignClient.SiteClient;
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.chargingPile.api.model.TChargingPile;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
import com.ruoyi.order.api.model.TChargingOrder;
@@ -26,6 +31,9 @@
import com.ruoyi.order.mapper.TChargingOrderMapper;
import com.ruoyi.order.service.TChargingBillService;
import com.ruoyi.order.service.TChargingOrderRefundService;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.feignClient.SysUserClient;
import com.ruoyi.system.api.model.SysUserRoleVo;
import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
import org.omg.CORBA.PRIVATE_MEMBER;
import org.springframework.stereotype.Service;
@@ -38,9 +46,7 @@
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -53,7 +59,8 @@
 */
@Service
public class TChargingBillServiceImpl extends ServiceImpl<TChargingBillMapper, TChargingBill> implements TChargingBillService {
    @Resource
    private SysUserClient sysUserClient;
    @Resource
    private TChargingOrderMapper chargingOrderList;
    @Resource
@@ -70,6 +77,12 @@
    private AppUserCarClient appUserCarClient;
    @Resource
    private TChargingOrderRefundService chargingOrderRefundService;
    @Resource
    private TokenService tokenService;
    @Resource
    private PartnerClient partnerClient;
    @Override
    public ChargingBillVO chargingBillList1(ChargingListQuery dto) {
        if (dto.getState()!=null){
@@ -88,11 +101,48 @@
            startTime1 = split[0];
            startTime2 = split[1];
        }
        Long userId = tokenService.getLoginUser().getUserid();
        // 查询当前登陆人按钮权限
        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
        Integer roleType = sysUser.getRoleType();
        List<Integer> siteIds = new ArrayList<>();
            //如果没传siteId,获取当前登陆人所有的siteIds
            if (dto.getSiteId()==null){
                if (userId != null){
                    List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
                    for (GetSiteListDTO datum : data) {
                        siteIds.add(datum.getId());
                    }
                }
            }else {
                siteIds.add(dto.getSiteId());
            }
            if (siteIds.isEmpty()){
                siteIds.add(-1);
            }else{
                if (roleType == 2){
                    List<Integer> integers = new ArrayList<>();
                    for (Integer siteId : siteIds) {
                        // 校验有没有这个站点的权限
                        List<Boolean> t1= partnerClient.getAccountMenu(sysUser.getObjectId(),siteId).getData();
                        Boolean b = t1.get(1);
                        if (b){
                            integers.add(siteId);
                        }
                    }
                    siteIds = integers;
                }
            }
            if (siteIds.isEmpty())siteIds.add(-1);
            dto.setSiteIds(siteIds);
        PageInfo<ChargingBillListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
        PageInfo<ChargingBillListVO> pageInfo1 = new PageInfo<>(1,9999999);
        List<ChargingBillListVO> list = this.baseMapper.chargingBillList1(pageInfo,dto,startTime1,startTime2);
        List<ChargingBillListVO> list1 = this.baseMapper.chargingBillList1(pageInfo1,dto,startTime1,startTime2);
        chargingBillVO.setOrderCount(list1.size());
        BigDecimal paymentAmountTotal = new BigDecimal("0");
        BigDecimal orderAmountTotal = new BigDecimal("0");
        BigDecimal refundAmountTotal = new BigDecimal("0");
@@ -103,7 +153,15 @@
        BigDecimal chargingCapacityTotal = new BigDecimal("0");
        BigDecimal discountTotal = new BigDecimal("0");
        int orderCount = 0;
        for (ChargingBillListVO chargingBillListVO : list) {
            if (roleType==2){
                List<Boolean> data = partnerClient.getAccountMenu(sysUser.getObjectId(), chargingBillListVO.getSiteId()).getData();
                chargingBillListVO.setAuthDownLoad(data.get(0));
                if (chargingBillListVO.getType()==1){
                    continue;
                }
            }
            String temp = "";
            String temp1 = "";
            switch (chargingBillListVO.getType()){
@@ -130,22 +188,18 @@
            chargingBillListVO.setUid(chargingBillListVO.getId().toString());
            // 根据账单的出账时间 查询上个月的充电订单
//            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
            // todo 临时修改为查询昨天的充电订单
            LocalDateTime localDate = chargingBillListVO.getBillTime().minusDays(1);
            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
//            LocalDateTime localDate = chargingBillListVO.getBillTime().minusDays(1);
            // 账单周期
            chargingBillListVO.setBillWeek(localDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
            // 获取 LocalDate 对象
            LocalDate date = localDate.toLocalDate();
//            // 获取该月份的第一天
//            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
//            // 获取该月份的最后一天
//            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
            // todo 临时修改为查询昨天凌晨00:00:00 到 23:59:59
            LocalDateTime firstDayOfMonth = LocalDateTime.of(date, LocalTime.MIN);
            LocalDateTime lastDayOfMonth = LocalDateTime.of(date, LocalTime.MAX);
            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
            // 获取该月份的最后一天
            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
            QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
                    .between("create_time", firstDayOfMonth, lastDayOfMonth)
                    .between("pay_time", firstDayOfMonth.atTime(0, 0, 0), lastDayOfMonth.atTime(23, 59, 59))
                    .eq("status", 5)
                    .eq("recharge_payment_status", 2);
            if (chargingBillListVO.getType() == 2) {
@@ -343,11 +397,15 @@
            chargingBillListVO.setChargingSecond(chargingSecond);
        }
        BigDecimal bigDecimal = new BigDecimal("0");
        int i = 0;
        for (ChargingBillListVO chargingBillListVO : list1) {
            if (chargingBillListVO.getType()==2){
            if (chargingBillListVO.getSiteId()!=0&&!siteIds.contains(chargingBillListVO.getSiteId())){
                continue;
            }
            if (chargingBillListVO.getType()==1){
                continue;
            }
            i++;
            LocalDateTime billTime = chargingBillListVO.getBillTime();
            // 将其转化为yyyy-MM格式字符串
            chargingBillVO.setCreateTime(billTime.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
@@ -355,20 +413,15 @@
            chargingBillVO.setBillWeek(billTime.minusMonths(1).format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
            chargingBillListVO.setUid(chargingBillListVO.getId().toString());
//            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
            // todo 临时修改为查询昨天的充电订单
            LocalDateTime localDate = chargingBillListVO.getBillTime().minusDays(1);
            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
            // 账单周期
            chargingBillListVO.setBillWeek(localDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
            // 获取 LocalDate 对象
            LocalDate date = localDate.toLocalDate();
//            // 获取该月份的第一天
//            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
//            // 获取该月份的最后一天
//            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
            // todo 临时修改为查询昨天凌晨00:00:00 到 23:59:59
            LocalDateTime firstDayOfMonth = LocalDateTime.of(date, LocalTime.MIN);
            LocalDateTime lastDayOfMonth = LocalDateTime.of(date, LocalTime.MAX);
            // 获取该月份的第一天
            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
            // 获取该月份的最后一天
            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
            QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
                    .between("create_time", firstDayOfMonth, lastDayOfMonth)
                    .eq("status", 5)
@@ -431,6 +484,7 @@
                }
            }
        }
        chargingBillVO.setOrderCount(i);
        chargingBillVO.setChargingCapacity(chargingCapacityTotal);
        chargingBillVO.setPaymentAmount(paymentAmountTotal);
        chargingBillVO.setOrderAmount(paymentAmountTotal.subtract(refundAmountTotal).subtract(commissionAmountTotal).subtract(sharingAmountTotal));
@@ -450,6 +504,8 @@
        chargingBillVO.setList(pageInfo);
        return chargingBillVO;
    }
    @Override
    public ChargingBillVO chargingBillList(ChargingListQuery dto) {
        if (dto.getState()!=null){
@@ -469,6 +525,49 @@
        }
        PageInfo<ChargingBillListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
        PageInfo<ChargingBillListVO> pageInfo1 = new PageInfo<>(1,9999999);
        Long userId = tokenService.getLoginUser().getUserid();
        // 查询当前登陆人按钮权限
        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
        Integer roleType = sysUser.getRoleType();
        //如果没传siteId,获取当前登陆人所有的siteIds
        List<Integer> siteIds = new ArrayList<>();
            //如果没传siteId,获取当前登陆人所有的siteIds
            if (dto.getSiteId()==null){
                if (userId != null){
                    List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
                    for (GetSiteListDTO datum : data) {
                        siteIds.add(datum.getId());
                    }
                }
            }else {
                siteIds.add(dto.getSiteId());
            }
            if (siteIds.isEmpty()){
                siteIds.add(-1);
            }else{
                if (roleType == 2){
                    List<Integer> integers = new ArrayList<>();
                    for (Integer siteId : siteIds) {
                        // 校验有没有这个站点的权限
                        List<Boolean> t1= partnerClient.getChargingBillMenu(sysUser.getObjectId(),siteId).getData();
                        Boolean b = t1.get(1);
                        if (b){
                            integers.add(siteId);
                        }
                    }
                    siteIds = integers;
                }
            }
        if (roleType==1){
            siteIds.add(0);
        }
        if (siteIds.isEmpty()){
            siteIds.add(-1);
        }
            dto.setSiteIds(siteIds);
        List<ChargingBillListVO> list = this.baseMapper.chargingBillList(pageInfo,dto,startTime1,startTime2);
        List<ChargingBillListVO> list1 = this.baseMapper.chargingBillList(pageInfo1,dto,startTime1,startTime2);
        BigDecimal paymentAmountTotal = new BigDecimal("0");
@@ -481,7 +580,29 @@
        BigDecimal discountTotal = new BigDecimal("0");
        BigDecimal refundAmountTotal = new BigDecimal("0");
        int orderCount = 0;
        List<ChargingBillListVO> chargingBillListVOS = new ArrayList<>();
        for (ChargingBillListVO chargingBillListVO : list) {
            if (roleType==2 && chargingBillListVO.getSiteId()!=0){
                chargingBillListVOS.add(chargingBillListVO);
            }
            if (roleType ==1 && (siteIds.contains(chargingBillListVO.getSiteId())|| chargingBillListVO.getSiteId()==0)){
                chargingBillListVOS.add(chargingBillListVO);
            }
        }
        for (ChargingBillListVO chargingBillListVO : chargingBillListVOS) {
            if (chargingBillListVO.getSiteId()!=0&&!siteIds.contains(chargingBillListVO.getSiteId())){
                continue;
            }
            if (roleType == 2){
                // 校验有没有这个站点的权限
                List<Boolean> t1= partnerClient.getChargingBillMenu(sysUser.getObjectId(),chargingBillListVO.getSiteId()).getData();
                chargingBillListVO.setAuthDownLoad(t1.get(0));
                if (chargingBillListVO.getSiteId()==0){
                    continue;
                }
            }
            String temp = "";
            String temp1 = "";
            switch (chargingBillListVO.getType()){
@@ -508,22 +629,18 @@
            chargingBillListVO.setUid(chargingBillListVO.getId().toString());
            // 根据账单的出账时间 查询上个月的充电订单
//            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
            // todo 临时修改为查询昨天的充电订单
            LocalDateTime localDate = chargingBillListVO.getBillTime().minusDays(1);
            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
//            LocalDateTime localDate = chargingBillListVO.getBillTime().minusDays(1);
            // 账单周期
            chargingBillListVO.setBillWeek(localDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
            // 获取 LocalDate 对象
            LocalDate date = localDate.toLocalDate();
//            // 获取该月份的第一天
//            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
//            // 获取该月份的最后一天
//            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
            // todo 临时修改为查询昨天凌晨00:00:00 到 23:59:59
            LocalDateTime firstDayOfMonth = LocalDateTime.of(date, LocalTime.MIN);
            LocalDateTime lastDayOfMonth = LocalDateTime.of(date, LocalTime.MAX);
            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
            // 获取该月份的最后一天
            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
            QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
                    .between("create_time", firstDayOfMonth, lastDayOfMonth)
                    .between("pay_time", firstDayOfMonth.atTime(0, 0, 0), lastDayOfMonth.atTime(23, 59, 59))
                    .eq("status", 5)
                    .eq("recharge_payment_status", 2);
            if (chargingBillListVO.getType() == 2) {
@@ -705,8 +822,13 @@
            chargingBillListVO.setChargingSecond(chargingSecond);
        }
        for (ChargingBillListVO chargingBillListVO : list1) {
            if (chargingBillListVO.getType() ==2){
            if (chargingBillListVO.getSiteId()!=0&&!siteIds.contains(chargingBillListVO.getSiteId())){
                continue;
            }
            if (roleType == 2){
                if (chargingBillListVO.getSiteId()==0){
                    continue;
                }
            }
            LocalDateTime billTime = chargingBillListVO.getBillTime();
            // 将其转化为yyyy-MM格式字符串
@@ -716,20 +838,18 @@
            chargingBillListVO.setUid(chargingBillListVO.getId().toString());
            // 根据账单的出账时间 查询上个月的充电订单
//            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
            // todo 临时修改为查询昨天的充电订单
            LocalDateTime localDate = chargingBillListVO.getBillTime().minusDays(1);
            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
//            LocalDateTime localDate = chargingBillListVO.getBillTime().minusDays(1);
            // 账单周期
            chargingBillListVO.setBillWeek(localDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
            // 获取 LocalDate 对象
            LocalDate date = localDate.toLocalDate();
//            // 获取该月份的第一天
//            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
//            // 获取该月份的最后一天
//            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
            // todo 临时修改为查询昨天凌晨00:00:00 到 23:59:59
            LocalDateTime firstDayOfMonth = LocalDateTime.of(date, LocalTime.MIN);
            LocalDateTime lastDayOfMonth = LocalDateTime.of(date, LocalTime.MAX);
            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
            // 获取该月份的最后一天
            LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
//            LocalDateTime firstDayOfMonth = LocalDateTime.of(date, LocalTime.MIN);
//            LocalDateTime lastDayOfMonth = LocalDateTime.of(date, LocalTime.MAX);
            QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
                    .between("create_time", firstDayOfMonth, lastDayOfMonth)
                    .eq("status", 5)
@@ -805,15 +925,21 @@
        chargingBillVO.setCommissionAmount(commissionAmountTotal.setScale(2, BigDecimal.ROUND_DOWN));
        chargingBillVO.setSharingAmount(sharingAmountTotal.setScale(2, BigDecimal.ROUND_DOWN));
        chargingBillVO.setDiscount(discountTotal.setScale(2, BigDecimal.ROUND_DOWN));
        pageInfo.setRecords(list);
        pageInfo.setRecords(chargingBillListVOS);
        chargingBillVO.setList(pageInfo);
        return chargingBillVO;
    }
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        // 将时间转化为字符串 只保留年月日 格式为yyyy-MM-dd
        String format = now.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        LocalDateTime localDateTime = LocalDateTime.now().minusMonths(1);
        // 获取 LocalDate 对象
        LocalDate date = localDateTime.toLocalDate();
//            // 获取该月份的第一天
        LocalDate firstDayOfMonth = date.withDayOfMonth(1);
        // 获取该月份的最后一天
        LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
        System.err.println(firstDayOfMonth);
        System.err.println(lastDayOfMonth);
    }
}