From 95a94f06372d279bb85228d1ff198e187571cb6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E5=85=81=E6=9E=9E?= <3422692813@qq.com> Date: Thu, 24 Oct 2024 18:05:58 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E6=95=91=E6=8F=B4=E5=A4=A7=E5=B1=8F?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/RescueBigScreeController.java | 81 +++++++++++- .../rescue/mapper/RescueCarInfoMapper.java | 8 ++ .../rescue/mapper/RescueInfoMapper.java | 18 +++ .../rescue/service/IRescueCarInfoService.java | 8 ++ .../rescue/service/IRescueInfoService.java | 27 ++++ .../service/IRescueRefuelRecordService.java | 8 ++ .../impl/RescueCarInfoServiceImpl.java | 16 +++ .../service/impl/RescueInfoServiceImpl.java | 90 ++++++++++++++ .../impl/RescueOrderInfoServiceImpl.java | 59 +++------ .../impl/RescueRefuelRecordServiceImpl.java | 102 ++++++++++++++- .../yudao/module/rescue/utils/DateUtils.java | 116 +++++++++++++++++- .../mapper/rescue/RescueCarInfoMapper.xml | 18 +++ .../mapper/rescue/RescueInfoMapper.xml | 53 ++++++++ 13 files changed, 553 insertions(+), 51 deletions(-) diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/controller/admin/RescueBigScreeController.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/controller/admin/RescueBigScreeController.java index bf1d101e..69182bf3 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/controller/admin/RescueBigScreeController.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/controller/admin/RescueBigScreeController.java @@ -1,26 +1,101 @@ package cn.iocoder.yudao.module.rescue.controller.admin; +import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.rescue.service.IRescueCarInfoService; +import cn.iocoder.yudao.module.rescue.service.IRescueInfoService; import cn.iocoder.yudao.module.rescue.service.IRescueOrderInfoService; +import cn.iocoder.yudao.module.rescue.service.IRescueRefuelRecordService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +/** + * 大屏数据统计 + */ @RestController @RequestMapping("/rescue/bigScree") public class RescueBigScreeController { @Autowired private IRescueOrderInfoService rescueOrderInfoService; + @Autowired + private IRescueRefuelRecordService rescueRefuelRecordService; + @Autowired + private IRescueInfoService rescueInfoService; + @Autowired + private IRescueCarInfoService rescueCarInfoService; /** + * 救援大屏救援订单接口 * - * @param type count 数量 money 金额 + * @param type count 数量 money 金额 * @param timeType day 日 month 月 year 年 * @return */ @GetMapping("/getRescueOrderCount") - public CommonResult getRescueOrderCount(String type, String timeType){ - return CommonResult.success(rescueOrderInfoService.getRescueOrderCount(type,timeType)); + public CommonResult getRescueOrderCount(String type, String timeType) { + return CommonResult.success(rescueOrderInfoService.getRescueOrderCount(type, timeType)); + } + + /** + * 救援大屏日常费用统计接口 + * @param timeType day 日 week 周 month 月 + * @return + */ + @GetMapping("/getRescueExpenseCount") + public CommonResult getRescueExpenseCount(String timeType) { + return CommonResult.success(rescueRefuelRecordService.getRescueExpenseCount(timeType)); + } + + /** + * 救援大屏获取经营分析接口 + * @return + */ + @GetMapping("/getManageAnalyze") + public CommonResult getManageAnalyze(String timeType) { + if (ObjectUtil.isEmpty(timeType)){ + timeType = "month"; + } + return CommonResult.success(rescueInfoService.getManageAnalyze(timeType)); + } + + /** + * 救援大屏获取出车次数统计接口 + * @param timeType day 日 month 月 year 年 + * @return + */ + @GetMapping("/getDrawOutAVehicleCount") + public CommonResult getDrawOutAVehicleCount(String timeType) { + return CommonResult.success(rescueInfoService.getDrawOutAVehicleCount(timeType)); + } + + /** + * 救援大屏获取司机排名接口 + * @param timeType recentMonth 近一月 recentYear 近一年 recentQuarter 近季度 + * @return + */ + @GetMapping("/getDriverSort") + public CommonResult getDriverSort(String timeType){ + return CommonResult.success(rescueInfoService.getDriverSort(timeType)); + } + + /** + * 救援大屏获取车辆预警接口 + * @param type keep 保养 insurance 保险 check 年审 + * @return + */ + @GetMapping("/getRescueCarEarlyWarning") + public CommonResult getRescueCarEarlyWarning(String type){ + return CommonResult.success(rescueCarInfoService.getRescueCarEarlyWarning(type)); + } + + /** + * 救援大屏获取救援订单占比接口 + * @return + */ + @GetMapping("/getRescueOrderByRoad") + public CommonResult getRescueOrderByRoad(){ + return CommonResult.success(rescueInfoService.getRescueOrderByRoad()); } } diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/mapper/RescueCarInfoMapper.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/mapper/RescueCarInfoMapper.java index 3b6ef344..caae72e0 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/mapper/RescueCarInfoMapper.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/mapper/RescueCarInfoMapper.java @@ -9,6 +9,7 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** * 救援车辆信息Mapper接口 @@ -69,4 +70,11 @@ public interface RescueCarInfoMapper extends BaseMapper List warnListBy( @Param("warnTime")String warnTime); List warnListBx(@Param("warnTime")String warnTime); List warnListNj(@Param("warnTime")String warnTime); + + /** + * 救援大屏获取车辆预警接口 + * @param type keep 保养 insurance 保险 check 年审 + * @return + */ + List> selectRescueCarEarlyWarning(String type); } diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/mapper/RescueInfoMapper.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/mapper/RescueInfoMapper.java index 659fdea3..beec5735 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/mapper/RescueInfoMapper.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/mapper/RescueInfoMapper.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.rescue.mapper; +import cn.hutool.core.date.DateTime; import cn.iocoder.yudao.module.rescue.domain.DriverInfo; import cn.iocoder.yudao.module.rescue.domain.RescueInfo; import cn.iocoder.yudao.module.rescue.dto.DriverInfo2Dto; @@ -69,4 +70,21 @@ public interface RescueInfoMapper extends BaseMapper * @date 10:46 2024/9/5 **/ List listBuckle(); + + List> selectManageAnalyze(@Param("startTime") DateTime startTime,@Param("endTime") DateTime endTime,@Param("tenantId") Long tenantId); + + /** + * 获取司机排序 + * @param startTime + * @param endTime + * @return + */ + List> selectDriverSort(@Param("startTime") DateTime startTime,@Param("endTime") DateTime endTime); + + /** + * 救援大屏获取救援订单占比接口 + * @param dictType + * @return + */ + List> selectRescueOrderByRoad(String dictType); } diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueCarInfoService.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueCarInfoService.java index aa56240c..a2f328b1 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueCarInfoService.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueCarInfoService.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; +import java.util.Map; /** * 救援车辆信息Service接口 @@ -70,4 +71,11 @@ public interface IRescueCarInfoService extends IService */ public int deleteRescueCarInfoById(Long id); List warnList(RescueCarInfo rescueCarInfo); + + /** + * 救援大屏获取车辆预警接口 + * @param type keep 保养 insurance 保险 check 年审 + * @return + */ + List> getRescueCarEarlyWarning(String type); } diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueInfoService.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueInfoService.java index 1df9c33c..0771aaf7 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueInfoService.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueInfoService.java @@ -134,4 +134,31 @@ public interface IRescueInfoService extends IService * @param returnCarVO 订单信息 **/ void inBase(ReturnCarVO returnCarVO); + + /** + * 获取经营分析 + * @param timeType + * @return + */ + List> getManageAnalyze(String timeType); + + /** + * 救援大屏获取出车次数统计 + * @param timeType + * @return + */ + Map getDrawOutAVehicleCount(String timeType); + + /** + * 救援大屏获取司机排名 + * @param timeType + * @return + */ + List> getDriverSort(String timeType); + + /** + * 救援大屏获取救援订单占比接口 + * @return + */ + List> getRescueOrderByRoad(); } diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueRefuelRecordService.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueRefuelRecordService.java index 261a62e8..abe80c30 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueRefuelRecordService.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueRefuelRecordService.java @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; +import java.util.Map; /** * 加油记录Service接口 @@ -67,4 +68,11 @@ public interface IRescueRefuelRecordService extends IService getRescueExpenseCount(String timeType); } diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueCarInfoServiceImpl.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueCarInfoServiceImpl.java index 3d648d7d..e0276f6c 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueCarInfoServiceImpl.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueCarInfoServiceImpl.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.rescue.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.module.rescue.domain.RescueCarInfo; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.module.rescue.mapper.RescueCarInfoMapper; @@ -18,6 +19,7 @@ import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser; @@ -161,4 +163,18 @@ public class RescueCarInfoServiceImpl extends ServiceImpl> getRescueCarEarlyWarning(String type) { + if (ObjectUtil.isEmpty(type)){ + return null; + } + return baseMapper.selectRescueCarEarlyWarning(type); + } } diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueInfoServiceImpl.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueInfoServiceImpl.java index 2b70bbc0..716898db 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueInfoServiceImpl.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueInfoServiceImpl.java @@ -1,11 +1,13 @@ package cn.iocoder.yudao.module.rescue.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; +import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; import cn.iocoder.yudao.module.appBase.domain.SysAnnouncement; import cn.iocoder.yudao.module.appBase.service.ISysAnnouncementService; @@ -16,6 +18,7 @@ import cn.iocoder.yudao.module.rescue.dto.DriverInfoDto; import cn.iocoder.yudao.module.rescue.dto.TaskDto; import cn.iocoder.yudao.module.rescue.mapper.RescueInfoMapper; import cn.iocoder.yudao.module.rescue.service.*; +import cn.iocoder.yudao.module.rescue.utils.DateUtils; import cn.iocoder.yudao.module.rescue.utils.RedisUtil; import cn.iocoder.yudao.module.rescue.utils.RedissonDelayQueue; import cn.iocoder.yudao.module.rescue.utils.StringUtils; @@ -1235,4 +1238,91 @@ public class RescueInfoServiceImpl extends ServiceImpl> getManageAnalyze(String timeType) { + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + Map map = DateUtils.getDateTimeList(timeType); + DateTime startTime = (DateTime) map.get("startTime"); + DateTime endTime = (DateTime) map.get("endTime"); + List> list = baseMapper.selectManageAnalyze(startTime, endTime,loginUser.getTenantId()); + return list; + } + + + /** + * 救援大屏获取出车次数统计 + * + * @param timeType + * @return + */ + @Override + public Map getDrawOutAVehicleCount(String timeType) { + //获取日期范围、startTime、endTime + Map dateMap = DateUtils.getDateTimeList(timeType); + List dateList = (List) dateMap.get("dateList"); + DateTime startTime = (DateTime) dateMap.get("startTime"); + DateTime endTime = (DateTime) dateMap.get("endTime"); + //根据日期范围查询救援订单 + List rescueOrderInfos = this.list(new LambdaQueryWrapper() + .between(RescueInfo::getRescueTime, startTime, endTime)); + List xList = new ArrayList<>(); + List yList = new ArrayList<>(); + // 遍历日期列表,获取每个日期对应的订单数量 + for (DateTime dateTime : dateList) { + //echarts x轴 + String dateName = DateUtils.getDateName(timeType, dateTime); + xList.add(dateName); + + List infos = filterRescueInfoByDate(rescueOrderInfos, dateTime, DateUtils.getEndTime(timeType, dateTime)); + //echarts y轴 + long count = infos.stream().count(); + yList.add(count); + } + + Map map = new HashMap<>(); + map.put("xList", xList); + map.put("yList", yList); + return map; + } + + /** + * 救援大屏获取司机排名 + * + * @param timeType + * @return + */ + @Override + public List> getDriverSort(String timeType) { + Map map = DateUtils.getDateTimeList(timeType); + DateTime startTime = (DateTime) map.get("startTime"); + DateTime endTime = (DateTime) map.get("endTime"); + return baseMapper.selectDriverSort(startTime, endTime); + } + + /** + * 救援大屏获取救援订单占比接口 + * + * @return + */ + @Override + public List> getRescueOrderByRoad() { + LoginUser user = SecurityFrameworkUtils.getLoginUser(); + return baseMapper.selectRescueOrderByRoad("kcRescueRoad-" + user.getTenantId()); + } + + public List filterRescueInfoByDate(List rescueInfos, Date startTime, Date endTime) { + return rescueInfos.stream() + .filter(info -> info.getRescueTime() != null && + !info.getRescueTime().before(startTime) && + !info.getRescueTime().after(endTime)) + .collect(Collectors.toList()); + } } diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueOrderInfoServiceImpl.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueOrderInfoServiceImpl.java index 80bf1cd8..71c818f6 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueOrderInfoServiceImpl.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueOrderInfoServiceImpl.java @@ -7,6 +7,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import cn.iocoder.yudao.module.rescue.domain.*; +import cn.iocoder.yudao.module.rescue.utils.DateUtils; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.rescue.service.*; import cn.iocoder.yudao.module.rescue.utils.pay.AesUtil; @@ -326,45 +327,18 @@ public class RescueOrderInfoServiceImpl extends ServiceImpl> getRescueOrderCount(String type, String timeType) { List> res = new ArrayList<>(); - DateTime startTime = DateUtil.date(); - DateTime endTime = new DateTime(); - List dateList = new ArrayList<>(); - switch (timeType) { - case "day": - startTime = DateUtil.beginOfDay(startTime); - endTime = DateUtil.endOfDay(endTime); - dateList = DateUtil.rangeToList(startTime, endTime, DateField.HOUR_OF_DAY); - break; - case "month": - startTime = DateUtil.beginOfMonth(startTime); - endTime = DateUtil.endOfMonth(endTime); - dateList = DateUtil.rangeToList(startTime, endTime, DateField.DAY_OF_MONTH); - break; - case "year": - startTime = DateUtil.beginOfYear(startTime); - endTime = DateUtil.endOfYear(endTime); - dateList = DateUtil.rangeToList(startTime, endTime, DateField.MONTH); - break; - } + Map resp = DateUtils.getDateTimeList(timeType); + List dateList = (List) resp.get("dateList"); + DateTime startTime = (DateTime) resp.get("startTime"); + DateTime endTime = (DateTime) resp.get("endTime"); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.between(RescueOrderInfo::getCreateTime, startTime, endTime); queryWrapper.eq(RescueOrderInfo::getOrderStatus, "3"); List list = this.list(queryWrapper); for (DateTime dateTime : dateList) { - String name = ""; - switch (timeType) { - case "day": - name = dateTime.toString("HH:mm"); - break; - case "month": - name = dateTime.toString("MM-dd"); - break; - case "year": - name = dateTime.toString("YYYY-MM"); - break; - } + String name = DateUtils.getDateName(timeType, dateTime); Map map = new HashMap<>(); - DateTime endTime1 = getEndTime(timeType, dateTime); + DateTime endTime1 = DateUtils.getEndTime(timeType, dateTime); List rescueOrderInfos = filterOrdersByDate(list, dateTime, endTime1); map.put("name", name); if ("count".equals(type)) { @@ -385,18 +359,13 @@ public class RescueOrderInfoServiceImpl extends ServiceImpl filterOrdersByDate(List orders, Date startDate, Date endDate) { return orders.stream() .filter(order -> order.getOrderTime() != null && diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueRefuelRecordServiceImpl.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueRefuelRecordServiceImpl.java index 07b69a72..434095e4 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueRefuelRecordServiceImpl.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/impl/RescueRefuelRecordServiceImpl.java @@ -1,17 +1,26 @@ package cn.iocoder.yudao.module.rescue.service.impl; +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.iocoder.yudao.module.rescue.domain.RescueCarSpend; import cn.iocoder.yudao.module.rescue.domain.RescueInfo; +import cn.iocoder.yudao.module.rescue.domain.RescueOrderInfo; import cn.iocoder.yudao.module.rescue.domain.RescueRefuelRecord; +import cn.iocoder.yudao.module.rescue.mapper.RescueCarSpendMapper; import cn.iocoder.yudao.module.rescue.service.IRescueRefuelRecordService; +import cn.iocoder.yudao.module.rescue.utils.DateUtils; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import cn.iocoder.yudao.module.rescue.mapper.RescueRefuelRecordMapper; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.Arrays; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * 加油记录Service业务层处理 @@ -22,6 +31,8 @@ import java.util.List; @Service public class RescueRefuelRecordServiceImpl extends ServiceImpl implements IRescueRefuelRecordService { + @Autowired + private RescueCarSpendMapper rescueCarSpendMapper; /** * 查询加油记录 * @@ -100,4 +111,91 @@ public class RescueRefuelRecordServiceImpl extends ServiceImpl getRescueExpenseCount(String timeType) { + Map map = new HashMap<>(); + Map resp = DateUtils.getDateTimeList(timeType); + List dateList = (List) resp.get("dateList"); + DateTime startTime = (DateTime) resp.get("startTime"); + DateTime endTime = (DateTime) resp.get("endTime"); + //根据开始时间与结束时间查询救援车加油记录表 + List rescueRefuelRecords = baseMapper.selectList(new LambdaQueryWrapper() + .between(RescueRefuelRecord::getRecordTime, startTime, endTime)); + //根据开始时间与结束时间查询救援测保养费用 + List rescueCarSpends = rescueCarSpendMapper.selectList(new LambdaQueryWrapper() + .between(RescueCarSpend::getMaintenanceTime, startTime, endTime)); + //燃油费统计 + double reefuleSum = rescueRefuelRecords.stream() + .filter(Objects::nonNull) // 过滤掉 null 对象 + .filter(refule -> Objects.nonNull(refule.getRefuelMoney())) // 过滤掉 payMoney 为 null 的对象 + .mapToDouble(RescueRefuelRecord::getRefuelMoney) // 获取支付金额 + .sum();// 计算总和 + map.put("totalRefuelMoney", reefuleSum); + + //保养费统计 + double maintenanceSum = rescueCarSpends.stream() + .filter(Objects::nonNull) // 过滤掉 null 对象 + .filter(maintenance -> Objects.nonNull(maintenance.getMaintenanceMoney())) // 过滤掉 payMoney 为 null 的对象 + .mapToDouble(RescueCarSpend::getMaintenanceMoney) // 获取支付金额 + .sum();// 计算总和 + map.put("totalMaintenanceMoney", maintenanceSum); + + //echarts 数据 + List> dataList = new ArrayList<>(); + List titleList = new ArrayList<>(); + titleList.add("product"); + titleList.add("油费"); + titleList.add("保养"); + dataList.add(titleList); + for (DateTime dateTime : dateList) { + List list = new ArrayList<>(); + String dateName = DateUtils.getDateName(timeType, dateTime); + list.add(dateName); + endTime = DateUtils.getEndTime(timeType, dateTime); + Map maps = getTotalRefuelAndMaintenanceData(rescueRefuelRecords, rescueCarSpends, dateTime, endTime); + list.add(maps.get("totalRefuelMoney")); + list.add(maps.get("totalMaintenanceMoney")); + dataList.add(list); + } + map.put("source", dataList); + return map; + } + + /** + * 根据救援加油记录与救援保养记录计算总加油费用与总保养费用(通过时间筛选) + * @param refuelRecords + * @param carSpends + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return + */ + public Map getTotalRefuelAndMaintenanceData( + List refuelRecords, + List carSpends, + Date startTime, + Date endTime) { + + double totalRefuelMoney = refuelRecords.stream() + .filter(record -> record.getRecordTime().after(startTime) && record.getRecordTime().before(endTime)) + .mapToDouble(RescueRefuelRecord::getRefuelMoney) + .sum(); + + double totalMaintenanceMoney = carSpends.stream() + .filter(spend -> spend.getMaintenanceTime().after(startTime) && spend.getMaintenanceTime().before(endTime)) + .mapToDouble(RescueCarSpend::getMaintenanceMoney) + .sum(); + + Map result = new HashMap<>(); + result.put("totalRefuelMoney", totalRefuelMoney); + result.put("totalMaintenanceMoney", totalMaintenanceMoney); + + return result; + } } diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/utils/DateUtils.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/utils/DateUtils.java index 3102f84d..fe868188 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/utils/DateUtils.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/utils/DateUtils.java @@ -1,12 +1,15 @@ package cn.iocoder.yudao.module.rescue.utils; +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import org.apache.commons.lang3.time.DateFormatUtils; import java.lang.management.ManagementFactory; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.*; -import java.util.Date; +import java.util.*; /** * 时间工具类 @@ -185,4 +188,115 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault()); return Date.from(zdt.toInstant()); } + + /** + * 通过时间类型、开始时间计算结束时间 + * @param timeType + * @param startTime + * @return + */ + public static DateTime getEndTime(String timeType, DateTime startTime) { + switch (timeType) { + case "day": + return DateUtil.endOfDay(startTime); + case "week": + return DateUtil.endOfWeek(startTime); + case "month": + return DateUtil.endOfMonth(startTime); + case "year": + return DateUtil.endOfYear(startTime); + case "recentYear": + return DateUtil.endOfYear(startTime); + case "recentMonth": + return DateUtil.endOfMonth(startTime); + case "recentQuarter": + DateTime endOfQuarter = DateUtil.offsetMonth(startTime, 3); + return DateUtil.endOfDay(DateUtil.offsetDay(endOfQuarter, -1)); + default: + return null; + } + } + + + /** + * 获取时间名称(根据时间类型) + * @param timeType + * @param dateTime + * @return + */ + public static String getDateName(String timeType, DateTime dateTime) { + String name = ""; + switch (timeType) { + case "day": + name = dateTime.toString("HH:mm"); + break; + case "month": + case "week": + case "recentMonth": + name = dateTime.toString("MM-dd"); + break; + case "year": + case "recentYear": + case "recentQuarter": + name = dateTime.toString("YYYY-MM"); + break; + } + return name; + } + + /** + * 获取时间列表(根据时间类型) + * @param timeType + * @return + */ + public static Map getDateTimeList(String timeType) { + Map result = new HashMap<>(); + DateTime now = DateUtil.date(); + DateTime startTime = now; + DateTime endTime = now; + List dateList = new ArrayList<>(); + + switch (timeType) { + case "day": + startTime = DateUtil.beginOfDay(startTime); + endTime = DateUtil.endOfDay(endTime); + dateList = DateUtil.rangeToList(startTime, endTime, DateField.HOUR_OF_DAY); + break; + case "week": + startTime = DateUtil.beginOfWeek(startTime); + endTime = DateUtil.endOfWeek(endTime); + dateList = DateUtil.rangeToList(startTime, endTime, DateField.DAY_OF_WEEK); + break; + case "month": + startTime = DateUtil.beginOfMonth(startTime); + endTime = DateUtil.endOfMonth(endTime); + dateList = DateUtil.rangeToList(startTime, endTime, DateField.DAY_OF_MONTH); + break; + case "year": + startTime = DateUtil.beginOfYear(startTime); + endTime = DateUtil.endOfYear(endTime); + dateList = DateUtil.rangeToList(startTime, endTime, DateField.MONTH); + break; + case "recentYear": + startTime = DateUtil.offsetYear(now, -1); + endTime = now; + dateList = DateUtil.rangeToList(startTime, endTime, DateField.MONTH); + break; + case "recentMonth": + startTime = DateUtil.offsetMonth(now, -1); + endTime = now; + dateList = DateUtil.rangeToList(startTime, endTime, DateField.DAY_OF_MONTH); + break; + case "recentQuarter": + startTime = DateUtil.offsetMonth(now, -3); + endTime = now; + dateList = DateUtil.rangeToList(startTime, endTime, DateField.MONTH); + break; + } + + result.put("dateList", dateList); + result.put("startTime", startTime); + result.put("endTime", endTime); + return result; + } } diff --git a/dl-module-rescue/src/main/resources/mapper/rescue/RescueCarInfoMapper.xml b/dl-module-rescue/src/main/resources/mapper/rescue/RescueCarInfoMapper.xml index 329e8bbc..89473cda 100644 --- a/dl-module-rescue/src/main/resources/mapper/rescue/RescueCarInfoMapper.xml +++ b/dl-module-rescue/src/main/resources/mapper/rescue/RescueCarInfoMapper.xml @@ -163,4 +163,22 @@ FROM `rescue_car_info` where car_check_time #{warnTime} + diff --git a/dl-module-rescue/src/main/resources/mapper/rescue/RescueInfoMapper.xml b/dl-module-rescue/src/main/resources/mapper/rescue/RescueInfoMapper.xml index c6e2d7be..d81f3250 100644 --- a/dl-module-rescue/src/main/resources/mapper/rescue/RescueInfoMapper.xml +++ b/dl-module-rescue/src/main/resources/mapper/rescue/RescueInfoMapper.xml @@ -439,4 +439,57 @@ LEFT JOIN system_dept sd ON t1.dept_id = sd.id ORDER BY sd.id desc + + + + + From 3f7e14445aeeb878e936d38019040fc4110153d6 Mon Sep 17 00:00:00 2001 From: Vinjor Date: Thu, 24 Oct 2024 18:17:26 +0800 Subject: [PATCH 02/12] 1 --- .../main/resources/mapper/notice/DlBaseNoticeMapper.xml | 7 ++++++- .../main/resources/mapper/order/RepairOrderInfoMapper.xml | 2 +- .../resources/mapper/tickets/DlRepairTicketsMapper.xml | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/dl-module-base/src/main/resources/mapper/notice/DlBaseNoticeMapper.xml b/dl-module-base/src/main/resources/mapper/notice/DlBaseNoticeMapper.xml index 39946bb0..2595e0a6 100644 --- a/dl-module-base/src/main/resources/mapper/notice/DlBaseNoticeMapper.xml +++ b/dl-module-base/src/main/resources/mapper/notice/DlBaseNoticeMapper.xml @@ -29,10 +29,15 @@