dujy-admin/src/test/java/org/dromara/test/DemoUnitTest.java
@@ -5,6 +5,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.time.LocalDate; import java.time.Month; import java.util.concurrent.TimeUnit; /** @@ -67,4 +69,34 @@ System.out.println("@AfterAll =================="); } /** * @Description TODO 获取本季度的第一天或最后一天 * @Param: [today, isFirst: true 表示开始时间,false表示结束时间] * @return: java.lang.String */ public static String getStartOrEndDayOfQuarter(LocalDate today, Boolean isFirst) { LocalDate resDate = LocalDate.now(); if (today == null) { today = resDate; } Month month = today.getMonth(); Month firstMonthOfQuarter = month.firstMonthOfQuarter(); Month endMonthOfQuarter = Month.of(firstMonthOfQuarter.getValue() + 2); if (isFirst) { resDate = LocalDate.of(today.getYear(), firstMonthOfQuarter, 1); } else { resDate = LocalDate.of(today.getYear(), endMonthOfQuarter, endMonthOfQuarter.length(today.isLeapYear())); } return resDate.toString(); } public static void main(String[] args) { System.out.println(getStartOrEndDayOfQuarter(LocalDate.parse("2024-05-04"), false)); System.out.println(getStartOrEndDayOfQuarter(LocalDate.parse("2024-06-04"), false)); System.out.println(getStartOrEndDayOfQuarter(LocalDate.parse("2024-07-04"), false)); System.out.println(getStartOrEndDayOfQuarter(LocalDate.parse("2024-01-04"), false)); System.out.println(getStartOrEndDayOfQuarter(LocalDate.parse("2024-02-04"), false)); } } dujy-modules/dujy-demo/src/main/java/org/dromara/demo/controller/DataDashboardController.java
New file @@ -0,0 +1,72 @@ package org.dromara.demo.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.demo.domain.bo.RsDangerTotalBo; import org.dromara.demo.domain.vo.*; import org.dromara.demo.service.IDataDashboardService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author ghl * @since 2024/3/8 上午 10:57 */ @RequiredArgsConstructor @RestController @RequestMapping("/dataDashboard") public class DataDashboardController { private final IDataDashboardService service; /** * 近3年交通事故指数 */ @SaCheckPermission("rs:trafficIndex:list") @GetMapping("/trafficIndex") public R<RsTrafficIndexVo> getTrafficIndex() { return R.ok(service.getTrafficIndex()); } /** * 人车路基础信息 */ @SaCheckPermission("rs:pcrData:list") @GetMapping("/pcrData") public TableDataInfo<RsPcrDataVo> getPcrData() { return TableDataInfo.build(service.getPcrData()); } /** * 重点景区运行情况 */ @SaCheckPermission("demo:sceneryOperationData:list") @GetMapping("/sceneryOperationData") public TableDataInfo<RsSceneryOperationDataVo> getSceneryOperationData() { return TableDataInfo.build(service.getSceneryOperationData()); } /** * 安全隐患情况 */ @SaCheckPermission("demo:dangerInfo:list") @GetMapping("/dangerInfo") public TableDataInfo<RsDangerInfoVo> getDangerInfo() { return TableDataInfo.build(service.getDangerInfo()); } /** * 安全隐患统计 */ @SaCheckPermission("demo:dangerTotal:list") @GetMapping("/dangerTotal") public R<RsDangerTotalDashboardVo> getDangerTotal() { return R.ok(service.getDangerTotal()); } } dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/vo/RsDangerTotalDashboardVo.java
New file @@ -0,0 +1,38 @@ package org.dromara.demo.domain.vo; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import org.dromara.demo.domain.RsDangerTotal; import java.io.Serializable; import java.util.List; /** * 安全隐患统计视图对象 rs_danger_total * * @author gonghl * @date 2024-02-29 */ @Data @AutoMapper(target = RsDangerTotal.class) public class RsDangerTotalDashboardVo implements Serializable { /** * 发现安全隐患 */ private Long findSecurityRisks; /** * 下发通知书 */ private Long issueNotice; /** * 处置安全隐患 */ private Long dealWithSecurityRisks; private List<RsDangerTotalVo> list; } dujy-modules/dujy-demo/src/main/java/org/dromara/demo/mapper/RsDangerTotalMapper.java
@@ -1,6 +1,7 @@ package org.dromara.demo.mapper; import org.dromara.demo.domain.RsDangerTotal; import org.dromara.demo.domain.vo.RsDangerTotalDashboardVo; import org.dromara.demo.domain.vo.RsDangerTotalVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; @@ -12,4 +13,9 @@ */ public interface RsDangerTotalMapper extends BaseMapperPlus<RsDangerTotal, RsDangerTotalVo> { /** * 获取隐患统计数量 * @return 隐患统计数量 */ RsDangerTotalDashboardVo getDangerTotalNums(); } dujy-modules/dujy-demo/src/main/java/org/dromara/demo/mapper/RsPcrDataMapper.java
@@ -1,8 +1,10 @@ package org.dromara.demo.mapper; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.demo.domain.RsPcrData; import org.dromara.demo.domain.vo.RsPcrDataVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import java.util.List; /** * 人车路基础信息Mapper接口 @@ -12,4 +14,5 @@ */ public interface RsPcrDataMapper extends BaseMapperPlus<RsPcrData, RsPcrDataVo> { List<RsPcrDataVo> getPcrData(); } dujy-modules/dujy-demo/src/main/java/org/dromara/demo/mapper/RsSceneryOperationDataMapper.java
@@ -1,8 +1,10 @@ package org.dromara.demo.mapper; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.demo.domain.RsSceneryOperationData; import org.dromara.demo.domain.vo.RsSceneryOperationDataVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import java.util.List; /** * 景区运行数据Mapper接口 @@ -12,4 +14,5 @@ */ public interface RsSceneryOperationDataMapper extends BaseMapperPlus<RsSceneryOperationData, RsSceneryOperationDataVo> { List<RsSceneryOperationDataVo> getSceneryOperationData(); } dujy-modules/dujy-demo/src/main/java/org/dromara/demo/service/IDataDashboardService.java
New file @@ -0,0 +1,47 @@ package org.dromara.demo.service; import org.dromara.demo.domain.vo.*; import java.util.List; /** * @author ghl * @since 2024/3/8 上午 10:59 */ public interface IDataDashboardService { /** * 近3年交通事故指数 * * @return 近3年交通事故指数 */ RsTrafficIndexVo getTrafficIndex(); /** * 人车路基础信息 * * @return 人车路基础信息 */ List<RsPcrDataVo> getPcrData(); /** * 重点景区运行情况 * * @return 重点景区运行情况 */ List<RsSceneryOperationDataVo> getSceneryOperationData(); /** * 安全隐患情况 * * @return 安全隐患情况 */ List<RsDangerInfoVo> getDangerInfo(); /** * 安全隐患统计 * @return 安全隐患统计 */ RsDangerTotalDashboardVo getDangerTotal(); } dujy-modules/dujy-demo/src/main/java/org/dromara/demo/service/impl/DataDashboardServiceImpl.java
New file @@ -0,0 +1,59 @@ package org.dromara.demo.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.demo.domain.RsDangerInfo; import org.dromara.demo.domain.RsTrafficIndex; import org.dromara.demo.domain.vo.*; import org.dromara.demo.mapper.*; import org.dromara.demo.service.IDataDashboardService; import org.springframework.stereotype.Service; import java.util.List; /** * @author gonghl * @date 2024-3-8 */ @RequiredArgsConstructor @Service public class DataDashboardServiceImpl implements IDataDashboardService { private final RsTrafficIndexMapper trafficIndexMapper; private final RsPcrDataMapper pcrDataMapper; private final RsSceneryOperationDataMapper sceneryOperationDataMapper; private final RsDangerInfoMapper dangerInfoMapper; private final RsDangerTotalMapper dangerTotalMapper; @Override public RsTrafficIndexVo getTrafficIndex() { LambdaQueryWrapper<RsTrafficIndex> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(RsTrafficIndex::getStatus, 1).orderByDesc(RsTrafficIndex::getCreateTime).last("limit 1"); return trafficIndexMapper.selectVoOne(queryWrapper); } @Override public List<RsPcrDataVo> getPcrData() { return pcrDataMapper.getPcrData(); } @Override public List<RsSceneryOperationDataVo> getSceneryOperationData() { return sceneryOperationDataMapper.getSceneryOperationData(); } @Override public List<RsDangerInfoVo> getDangerInfo() { LambdaQueryWrapper<RsDangerInfo> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(RsDangerInfo::getStatus, 1).orderByDesc(RsDangerInfo::getCreateTime); return dangerInfoMapper.selectVoList(queryWrapper); } @Override public RsDangerTotalDashboardVo getDangerTotal() { RsDangerTotalDashboardVo dangerTotalDashboardVo = dangerTotalMapper.getDangerTotalNums(); // dangerTotalMapper. return dangerTotalDashboardVo; } } dujy-modules/dujy-demo/src/main/resources/mapper/demo/RsDangerTotalMapper.xml
@@ -4,4 +4,11 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.dromara.demo.mapper.RsDangerTotalMapper"> <select id="getDangerTotalNums" resultType="org.dromara.demo.domain.vo.RsDangerTotalDashboardVo"> select sum(find_security_risks) as find_security_risks, sum(issue_notice) as issue_notice, sum(deal_with_security_risks) as deal_with_security_risks from rs_danger_total where status = 1 </select> </mapper> dujy-modules/dujy-demo/src/main/resources/mapper/demo/RsPcrDataMapper.xml
@@ -3,5 +3,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.dromara.demo.mapper.RsPcrDataMapper"> <select id="getPcrData" resultType="org.dromara.demo.domain.vo.RsPcrDataVo"> select * from (select * from rs_pcr_data where `status` = 1 and mode_name = '道路里程数量' ORDER BY create_time desc LIMIT 1) a union select * from (select * from rs_pcr_data where `status` = 1 and mode_name = '机动车保有量' ORDER BY create_time desc LIMIT 1) b union select * from (select * from rs_pcr_data where `status` = 1 and mode_name = '驾驶人保有量' ORDER BY create_time desc LIMIT 1) c </select> </mapper> dujy-modules/dujy-demo/src/main/resources/mapper/demo/RsSceneryOperationDataMapper.xml
@@ -3,5 +3,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.dromara.demo.mapper.RsSceneryOperationDataMapper"> <select id="getSceneryOperationData" resultType="org.dromara.demo.domain.vo.RsSceneryOperationDataVo"> select a.* from rs_scenery_operation_data a inner join rs_scenery_info b on a.scenery_info_name = b.scenery_name where a.status = 1 order by b.sequence </select> </mapper>