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 new file mode 100644 index 00000000..bf1d101e --- /dev/null +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/controller/admin/RescueBigScreeController.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.rescue.controller.admin; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.rescue.service.IRescueOrderInfoService; +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; + + /** + * + * @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)); + } +} diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/mapper/RescueOrderInfoMapper.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/mapper/RescueOrderInfoMapper.java index 50f38dd0..3fd66f9f 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/mapper/RescueOrderInfoMapper.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/mapper/RescueOrderInfoMapper.java @@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** * 救援订单Mapper接口 @@ -33,5 +34,4 @@ public interface RescueOrderInfoMapper extends BaseMapper */ public List selectRescueOrderInfoList(RescueOrderInfo rescueOrderInfo); Double avgPartnerScore(@Param("driverId") Long driverId); - } diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueOrderInfoService.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueOrderInfoService.java index 51ab1446..3709aba8 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueOrderInfoService.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/service/IRescueOrderInfoService.java @@ -69,4 +69,12 @@ public interface IRescueOrderInfoService extends IService RescueOrderInfo getOrderByOrderNo(String orderNo); Map payNotify( JSONObject jsonObject); public void reviewOrder(String rescueId, Integer starLevel, String reviewStr) throws Exception; + + /** + * + * @param type count 数量 money 金额 + * @param timeType day 日 month 月 year 年 + * @return + */ + List> getRescueOrderCount(String type, String timeType); } 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 1d042229..80bf1cd8 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 @@ -1,6 +1,9 @@ package cn.iocoder.yudao.module.rescue.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import cn.iocoder.yudao.module.rescue.domain.*; @@ -22,6 +25,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.nio.charset.StandardCharsets; +import java.time.LocalDate; import java.util.*; import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; @@ -313,4 +317,91 @@ 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; + } + 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; + } + Map map = new HashMap<>(); + DateTime endTime1 = getEndTime(timeType, dateTime); + List rescueOrderInfos = filterOrdersByDate(list, dateTime, endTime1); + map.put("name", name); + if ("count".equals(type)) { + long count = rescueOrderInfos.stream().count(); + map.put("value", count); + }else if ("money".equals(type)) { + // 使用 stream() 计算总金额,并防止空指针异常 + long money = rescueOrderInfos.stream() + .filter(Objects::nonNull) // 过滤掉 null 对象 + .filter(order -> Objects.nonNull(order.getPayMoney())) // 过滤掉 payMoney 为 null 的对象 + .mapToLong(RescueOrderInfo::getPayMoney) // 获取支付金额 + .sum(); // 计算总和 + //将分转为元 + map.put("value", (double)money / 100); + } + res.add(map); + } + return res; + } + + public DateTime getEndTime(String timeType, DateTime startTime){ + switch (timeType) { + case "day": + return DateUtil.endOfHour(startTime); + case "month": + return DateUtil.endOfDay(startTime); + case "year": + return DateUtil.endOfMonth(startTime); + } + return null; + } + + public List filterOrdersByDate(List orders, Date startDate, Date endDate) { + return orders.stream() + .filter(order -> order.getOrderTime() != null && + !order.getOrderTime().before(startDate) && + !order.getOrderTime().after(endDate)) + .collect(Collectors.toList()); + } }