龚焕茏
2024-03-11 2bacd2670e0f1b495e9cfda6023d8bccc32a5572
数据大屏剩余接口
20个文件已修改
9个文件已添加
976 ■■■■■ 已修改文件
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/controller/DataDashboardController.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/controller/RsTrafficAccidentController.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/RsTrafficAccident.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/bo/RsTrafficAccidentBo.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/vo/RsDangerInfoVo.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/vo/RsTrafficAccidentVo.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/vo/RsTrafficIndexVo.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/vo/RsTrafficPropagandaVo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/mapper/RsDangerInfoMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/mapper/RsDangerTotalMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/mapper/RsGeographyDataMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/mapper/RsTrafficAccidentMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/mapper/RsTrafficIndexMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/mapper/RsTrafficPropagandaMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/service/IDataDashboardService.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/service/IRsTrafficAccidentService.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/service/impl/DataDashboardServiceImpl.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/service/impl/RsGeographyDataServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/service/impl/RsPcrDataServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/service/impl/RsTrafficAccidentServiceImpl.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/service/impl/RsTrafficIndexServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/service/impl/TargetDataServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/util/PeriodDate.java 315 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/resources/mapper/demo/RsDangerInfoMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/resources/mapper/demo/RsDangerTotalMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/resources/mapper/demo/RsGeographyDataMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/resources/mapper/demo/RsTrafficAccidentMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/resources/mapper/demo/RsTrafficIndexMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/resources/mapper/demo/RsTrafficPropagandaMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/controller/DataDashboardController.java
@@ -3,14 +3,16 @@
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.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
 * @author ghl
@@ -64,9 +66,37 @@
     * 安全隐患统计
     */
    @SaCheckPermission("demo:dangerTotal:list")
    @GetMapping("/dangerTotal")
    public R<RsDangerTotalDashboardVo> getDangerTotal() {
        return R.ok(service.getDangerTotal());
    @GetMapping("/dangerTotal/{period}")
    public R<RsDangerTotalDashboardVo> getDangerTotal(@PathVariable String period) {
        return R.ok(service.getDangerTotal(period));
    }
    /**
     * 交通宣传
     */
    @SaCheckPermission("demo:trafficPropaganda:list")
    @GetMapping("/trafficPropaganda")
    public TableDataInfo<RsTrafficPropagandaVo> getTrafficPropaganda() {
        return TableDataInfo.build(service.getTrafficPropaganda());
    }
    /**
     * 交通事故
     */
    @SaCheckPermission("demo:trafficAccident:list")
    @GetMapping("/trafficAccident")
    public TableDataInfo<RsTrafficAccidentVo> getTrafficAccident() {
        return TableDataInfo.build(service.getTrafficAccident());
    }
    /**
     * 数据上图
     */
    @SaCheckPermission("demo:geographyData:list")
    @GetMapping("/geographyData")
    public R<List<Map<String, Object>>> getGeographyData() {
        return R.ok(service.getGeographyData());
    }
}
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/controller/RsTrafficAccidentController.java
New file
@@ -0,0 +1,105 @@
package org.dromara.demo.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.demo.domain.vo.RsTrafficAccidentVo;
import org.dromara.demo.domain.bo.RsTrafficAccidentBo;
import org.dromara.demo.service.IRsTrafficAccidentService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
 * 交通事故
 *
 * @author gonghl
 * @date 2024-03-11
 */
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/demo/trafficAccident")
public class RsTrafficAccidentController extends BaseController {
    private final IRsTrafficAccidentService rsTrafficAccidentService;
    /**
     * 查询交通事故列表
     */
    @SaCheckPermission("demo:trafficAccident:list")
    @GetMapping("/list")
    public TableDataInfo<RsTrafficAccidentVo> list(RsTrafficAccidentBo bo, PageQuery pageQuery) {
        return rsTrafficAccidentService.queryPageList(bo, pageQuery);
    }
    /**
     * 导出交通事故列表
     */
    @SaCheckPermission("demo:trafficAccident:export")
    @Log(title = "交通事故", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(RsTrafficAccidentBo bo, HttpServletResponse response) {
        List<RsTrafficAccidentVo> list = rsTrafficAccidentService.queryList(bo);
        ExcelUtil.exportExcel(list, "交通事故", RsTrafficAccidentVo.class, response);
    }
    /**
     * 获取交通事故详细信息
     *
     * @param id 主键
     */
    @SaCheckPermission("demo:trafficAccident:query")
    @GetMapping("/{id}")
    public R<RsTrafficAccidentVo> getInfo(@NotNull(message = "主键不能为空")
                                     @PathVariable String id) {
        return R.ok(rsTrafficAccidentService.queryById(id));
    }
    /**
     * 新增交通事故
     */
    @SaCheckPermission("demo:trafficAccident:add")
    @Log(title = "交通事故", businessType = BusinessType.INSERT)
    @RepeatSubmit()
    @PostMapping()
    public R<Void> add(@Validated(AddGroup.class) @RequestBody RsTrafficAccidentBo bo) {
        return toAjax(rsTrafficAccidentService.insertByBo(bo));
    }
    /**
     * 修改交通事故
     */
    @SaCheckPermission("demo:trafficAccident:edit")
    @Log(title = "交通事故", businessType = BusinessType.UPDATE)
    @RepeatSubmit()
    @PutMapping()
    public R<Void> edit(@Validated(EditGroup.class) @RequestBody RsTrafficAccidentBo bo) {
        return toAjax(rsTrafficAccidentService.updateByBo(bo));
    }
    /**
     * 删除交通事故
     *
     * @param ids 主键串
     */
    @SaCheckPermission("demo:trafficAccident:remove")
    @Log(title = "交通事故", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public R<Void> remove(@NotEmpty(message = "主键不能为空")
                          @PathVariable String[] ids) {
        return toAjax(rsTrafficAccidentService.deleteWithValidByIds(List.of(ids), true));
    }
}
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/RsTrafficAccident.java
New file
@@ -0,0 +1,45 @@
package org.dromara.demo.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.util.Date;
/**
 * 交通事故对象 rs_traffic_accident
 *
 * @author gonghl
 * @date 2024-03-11
 */
@Data
@TableName("rs_traffic_accident")
public class RsTrafficAccident {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * 编号
     */
    @TableId(value = "id")
    private String id;
    /**
     * 标题
     */
    private String title;
    /**
     * 排序
     */
    private Long sequence;
    /**
     * 启用状态 1启用 2未启用
     */
    private Long status;
    private Date createTime;
}
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/bo/RsTrafficAccidentBo.java
New file
@@ -0,0 +1,48 @@
package org.dromara.demo.domain.bo;
import org.dromara.demo.domain.RsTrafficAccident;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
 * 交通事故业务对象 rs_traffic_accident
 *
 * @author gonghl
 * @date 2024-03-11
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = RsTrafficAccident.class, reverseConvertGenerate = false)
public class RsTrafficAccidentBo extends BaseEntity {
    /**
     * 编号
     */
    @NotBlank(message = "编号不能为空", groups = { EditGroup.class })
    private String id;
    /**
     * 标题
     */
    @NotBlank(message = "标题不能为空", groups = { AddGroup.class, EditGroup.class })
    private String title;
    /**
     * 排序
     */
    @NotNull(message = "排序不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long sequence;
    /**
     * 启用状态 1启用 2未启用
     */
    @NotNull(message = "启用状态 1启用 2未启用不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long status;
}
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/vo/RsDangerInfoVo.java
@@ -1,17 +1,16 @@
package org.dromara.demo.domain.vo;
import org.dromara.demo.domain.RsDangerInfo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.demo.domain.RsDangerInfo;
import org.dromara.system.domain.vo.SysOssVo;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
@@ -75,4 +74,7 @@
     */
    @ExcelProperty(value = "创建时间")
    private Date createTime;
    private List<SysOssVo> imgList;
}
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/vo/RsTrafficAccidentVo.java
New file
@@ -0,0 +1,62 @@
package org.dromara.demo.domain.vo;
import org.dromara.demo.domain.RsTrafficAccident;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
 * 交通事故视图对象 rs_traffic_accident
 *
 * @author gonghl
 * @date 2024-03-11
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = RsTrafficAccident.class)
public class RsTrafficAccidentVo implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * 编号
     */
    @ExcelProperty(value = "编号")
    private String id;
    /**
     * 标题
     */
    @ExcelProperty(value = "标题")
    private String title;
    /**
     * 排序
     */
    @ExcelProperty(value = "排序")
    private Long sequence;
    /**
     * 创建时间
     */
    @ExcelProperty(value = "创建时间")
    private Date createTime;
    /**
     * 启用状态 1启用 2未启用
     */
    @ExcelProperty(value = "启用状态 1启用 2未启用")
    private Long status;
}
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/vo/RsTrafficIndexVo.java
@@ -9,7 +9,7 @@
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
@@ -182,5 +182,9 @@
    @ExcelProperty(value = "创建时间")
    private Date createTime;
    private String targetOneIcon;
    private String targetTwoIcon;
    private String targetThreeIcon;
    private String targetFourIcon;
}
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/domain/vo/RsTrafficPropagandaVo.java
@@ -58,4 +58,6 @@
    @ExcelProperty(value = "创建时间")
    private Date createTime;
    private String url;
}
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/mapper/RsDangerInfoMapper.java
@@ -4,6 +4,8 @@
import org.dromara.demo.domain.vo.RsDangerInfoVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import java.util.List;
/**
 * 安全隐患信息Mapper接口
 *
@@ -12,4 +14,5 @@
 */
public interface RsDangerInfoMapper extends BaseMapperPlus<RsDangerInfo, RsDangerInfoVo> {
    List<RsDangerInfoVo> getDangerInfo();
}
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/mapper/RsDangerTotalMapper.java
@@ -5,6 +5,8 @@
import org.dromara.demo.domain.vo.RsDangerTotalVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import java.util.List;
/**
 * 安全隐患统计Mapper接口
 *
@@ -18,4 +20,11 @@
     * @return 隐患统计数量
     */
    RsDangerTotalDashboardVo getDangerTotalNums();
    /**
     * 获取隐患统计列表
     * @param periodDate 统计周期
     * @return 隐患统计列表
     */
    List<RsDangerTotalVo> getDangerTotalInfo(String periodDate);
}
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/mapper/RsGeographyDataMapper.java
@@ -1,8 +1,11 @@
package org.dromara.demo.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.demo.domain.RsGeographyData;
import org.dromara.demo.domain.vo.RsGeographyDataVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import java.util.List;
import java.util.Map;
/**
 * 数据上图Mapper接口
@@ -12,4 +15,5 @@
 */
public interface RsGeographyDataMapper extends BaseMapperPlus<RsGeographyData, RsGeographyDataVo> {
    List<Map<String, Object>> getGeographyData();
}
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/mapper/RsTrafficAccidentMapper.java
New file
@@ -0,0 +1,18 @@
package org.dromara.demo.mapper;
import org.dromara.demo.domain.RsTrafficAccident;
import org.dromara.demo.domain.vo.RsTrafficAccidentVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import java.util.List;
/**
 * 交通事故Mapper接口
 *
 * @author gonghl
 * @date 2024-03-11
 */
public interface RsTrafficAccidentMapper extends BaseMapperPlus<RsTrafficAccident, RsTrafficAccidentVo> {
    List<RsTrafficAccidentVo> getTrafficAccident();
}
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/mapper/RsTrafficIndexMapper.java
@@ -20,4 +20,10 @@
     * @return 图标
     */
    List<Map<String, String>> icon();
    /**
     * 近3年交通事故指数
     * @return 近3年交通事故指数
     */
    RsTrafficIndexVo getTrafficIndex();
}
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/mapper/RsTrafficPropagandaMapper.java
@@ -4,6 +4,8 @@
import org.dromara.demo.domain.vo.RsTrafficPropagandaVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import java.util.List;
/**
 * 交通宣传Mapper接口
 *
@@ -19,4 +21,9 @@
     */
    void addSequence(Long sequence, String id);
    /**
     * 交通宣传
     * @return 交通宣传
     */
    List<RsTrafficPropagandaVo> getTrafficPropaganda();
}
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/service/IDataDashboardService.java
@@ -3,6 +3,7 @@
import org.dromara.demo.domain.vo.*;
import java.util.List;
import java.util.Map;
/**
 * @author ghl
@@ -41,7 +42,29 @@
    /**
     * 安全隐患统计
     *
     * @return 安全隐患统计
     */
    RsDangerTotalDashboardVo getDangerTotal();
    RsDangerTotalDashboardVo getDangerTotal(String period);
    /**
     * 交通宣传
     *
     * @return 交通宣传
     */
    List<RsTrafficPropagandaVo> getTrafficPropaganda();
    /**
     * 交通事故
     *
     * @return 交通事故
     */
    List<RsTrafficAccidentVo> getTrafficAccident();
    /**
     * 数据上图
     *
     * @return 数据上图
     */
    List<Map<String, Object>> getGeographyData();
}
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/service/IRsTrafficAccidentService.java
New file
@@ -0,0 +1,49 @@
package org.dromara.demo.service;
import org.dromara.demo.domain.RsTrafficAccident;
import org.dromara.demo.domain.vo.RsTrafficAccidentVo;
import org.dromara.demo.domain.bo.RsTrafficAccidentBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
 * 交通事故Service接口
 *
 * @author gonghl
 * @date 2024-03-11
 */
public interface IRsTrafficAccidentService {
    /**
     * 查询交通事故
     */
    RsTrafficAccidentVo queryById(String id);
    /**
     * 查询交通事故列表
     */
    TableDataInfo<RsTrafficAccidentVo> queryPageList(RsTrafficAccidentBo bo, PageQuery pageQuery);
    /**
     * 查询交通事故列表
     */
    List<RsTrafficAccidentVo> queryList(RsTrafficAccidentBo bo);
    /**
     * 新增交通事故
     */
    Boolean insertByBo(RsTrafficAccidentBo bo);
    /**
     * 修改交通事故
     */
    Boolean updateByBo(RsTrafficAccidentBo bo);
    /**
     * 校验并批量删除交通事故信息
     */
    Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);
}
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/service/impl/DataDashboardServiceImpl.java
@@ -3,14 +3,15 @@
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.dromara.demo.util.PeriodDate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
 * @author gonghl
@@ -25,12 +26,13 @@
    private final RsSceneryOperationDataMapper sceneryOperationDataMapper;
    private final RsDangerInfoMapper dangerInfoMapper;
    private final RsDangerTotalMapper dangerTotalMapper;
    private final RsTrafficPropagandaMapper trafficPropagandaMapper;
    private final RsTrafficAccidentMapper trafficAccidentMapper;
    private final RsGeographyDataMapper geographyDataMapper;
    @Override
    public RsTrafficIndexVo getTrafficIndex() {
        LambdaQueryWrapper<RsTrafficIndex> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(RsTrafficIndex::getStatus, 1).orderByDesc(RsTrafficIndex::getCreateTime).last("limit 1");
        return trafficIndexMapper.selectVoOne(queryWrapper);
        return trafficIndexMapper.getTrafficIndex();
    }
    @Override
@@ -45,15 +47,30 @@
    @Override
    public List<RsDangerInfoVo> getDangerInfo() {
        LambdaQueryWrapper<RsDangerInfo> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(RsDangerInfo::getStatus, 1).orderByDesc(RsDangerInfo::getCreateTime);
        return dangerInfoMapper.selectVoList(queryWrapper);
        return dangerInfoMapper.getDangerInfo();
    }
    @Override
    public RsDangerTotalDashboardVo getDangerTotal() {
    public RsDangerTotalDashboardVo getDangerTotal(String period) {
        RsDangerTotalDashboardVo dangerTotalDashboardVo = dangerTotalMapper.getDangerTotalNums();
        // dangerTotalMapper.
        String periodDate = "quarter".equals(period) ? new PeriodDate().firstdateTimSeason : new PeriodDate().MonthFirst;
        List<RsDangerTotalVo> list = dangerTotalMapper.getDangerTotalInfo(periodDate);
        dangerTotalDashboardVo.setList(list);
        return dangerTotalDashboardVo;
    }
    @Override
    public List<RsTrafficPropagandaVo> getTrafficPropaganda() {
        return trafficPropagandaMapper.getTrafficPropaganda();
    }
    @Override
    public List<RsTrafficAccidentVo> getTrafficAccident() {
        return trafficAccidentMapper.getTrafficAccident();
    }
    @Override
    public List<Map<String, Object>> getGeographyData() {
        return geographyDataMapper.getGeographyData();
    }
}
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/service/impl/RsGeographyDataServiceImpl.java
@@ -63,6 +63,7 @@
        Map<String, Object> params = bo.getParams();
        LambdaQueryWrapper<RsGeographyData> lqw = Wrappers.lambdaQuery();
        lqw.like(StringUtils.isNotBlank(bo.getName()), RsGeographyData::getName, bo.getName());
        lqw.orderByDesc(RsGeographyData::getCreateTime);
        return lqw;
    }
@@ -86,7 +87,6 @@
    @Override
    public Boolean updateByBo(RsGeographyDataBo bo) {
        RsGeographyData update = MapstructUtils.convert(bo, RsGeographyData.class);
        validEntityBeforeSave(update);
        return baseMapper.updateById(update) > 0;
    }
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/service/impl/RsPcrDataServiceImpl.java
@@ -105,7 +105,6 @@
    @Override
    public Boolean updateByBo(RsPcrDataBo bo) {
        RsPcrData update = MapstructUtils.convert(bo, RsPcrData.class);
        validEntityBeforeSave(update);
        // 启用新数据将其余同类型数据改为禁用
        if (bo.getStatus().equals(1L)) {
            LambdaUpdateWrapper<RsPcrData> updateWrapper = new LambdaUpdateWrapper<>();
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/service/impl/RsTrafficAccidentServiceImpl.java
New file
@@ -0,0 +1,111 @@
package org.dromara.demo.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.demo.domain.RsTrafficAccident;
import org.dromara.demo.domain.bo.RsTrafficAccidentBo;
import org.dromara.demo.domain.vo.RsTrafficAccidentVo;
import org.dromara.demo.mapper.RsTrafficAccidentMapper;
import org.dromara.demo.service.IRsTrafficAccidentService;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * 交通事故Service业务层处理
 *
 * @author gonghl
 * @date 2024-03-11
 */
@RequiredArgsConstructor
@Service
public class RsTrafficAccidentServiceImpl implements IRsTrafficAccidentService {
    private final RsTrafficAccidentMapper baseMapper;
    /**
     * 查询交通事故
     */
    @Override
    public RsTrafficAccidentVo queryById(String id) {
        return baseMapper.selectVoById(id);
    }
    /**
     * 查询交通事故列表
     */
    @Override
    public TableDataInfo<RsTrafficAccidentVo> queryPageList(RsTrafficAccidentBo bo, PageQuery pageQuery) {
        LambdaQueryWrapper<RsTrafficAccident> lqw = buildQueryWrapper(bo);
        Page<RsTrafficAccidentVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
        return TableDataInfo.build(result);
    }
    /**
     * 查询交通事故列表
     */
    @Override
    public List<RsTrafficAccidentVo> queryList(RsTrafficAccidentBo bo) {
        LambdaQueryWrapper<RsTrafficAccident> lqw = buildQueryWrapper(bo);
        return baseMapper.selectVoList(lqw);
    }
    private LambdaQueryWrapper<RsTrafficAccident> buildQueryWrapper(RsTrafficAccidentBo bo) {
        Map<String, Object> params = bo.getParams();
        LambdaQueryWrapper<RsTrafficAccident> lqw = Wrappers.lambdaQuery();
        lqw.like(StringUtils.isNotBlank(bo.getTitle()), RsTrafficAccident::getTitle, bo.getTitle());
        lqw.eq(bo.getStatus() != null, RsTrafficAccident::getStatus, bo.getStatus());
        lqw.orderByAsc(RsTrafficAccident::getSequence);
        return lqw;
    }
    /**
     * 新增交通事故
     */
    @Override
    public Boolean insertByBo(RsTrafficAccidentBo bo) {
        RsTrafficAccident add = MapstructUtils.convert(bo, RsTrafficAccident.class);
        validEntityBeforeSave(add);
        boolean flag = baseMapper.insert(add) > 0;
        if (flag) {
            bo.setId(add.getId());
        }
        return flag;
    }
    /**
     * 修改交通事故
     */
    @Override
    public Boolean updateByBo(RsTrafficAccidentBo bo) {
        RsTrafficAccident update = MapstructUtils.convert(bo, RsTrafficAccident.class);
        return baseMapper.updateById(update) > 0;
    }
    /**
     * 保存前的数据校验
     */
    private void validEntityBeforeSave(RsTrafficAccident entity) {
        entity.setCreateTime(new Date());
    }
    /**
     * 批量删除交通事故
     */
    @Override
    public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) {
        if (isValid) {
            //TODO 做一些业务上的校验,判断是否需要校验
        }
        return baseMapper.deleteBatchIds(ids) > 0;
    }
}
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/service/impl/RsTrafficIndexServiceImpl.java
@@ -116,7 +116,6 @@
    @Override
    public Boolean updateByBo(RsTrafficIndexBo bo) {
        RsTrafficIndex update = MapstructUtils.convert(bo, RsTrafficIndex.class);
        validEntityBeforeSave(update);
        // 启用新数据将所有数据改为禁用
        if (bo.getStatus().equals(1)) {
            LambdaUpdateWrapper<RsTrafficIndex> updateWrapper = new LambdaUpdateWrapper<>();
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/service/impl/TargetDataServiceImpl.java
@@ -88,7 +88,6 @@
    @Override
    public Boolean updateByBo(TargetDataBo bo) {
        TargetData update = MapstructUtils.convert(bo, TargetData.class);
        validEntityBeforeSave(update);
        return baseMapper.updateById(update) > 0;
    }
dujy-modules/dujy-demo/src/main/java/org/dromara/demo/util/PeriodDate.java
New file
@@ -0,0 +1,315 @@
package org.dromara.demo.util;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import org.springframework.util.StringUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class PeriodDate {
    public static final String FORMAT_YYYY_MM_DD = "yyyy-MM-dd";
    //今天
    public String today = DateUtil.today();
    public DateTime date = DateUtil.date();
    //本月
    public String month = DateUtil.format(date, "M");
    //本周的第一天
    public String weekFirst = PeriodDate.getThisWeekOfFirstDate();
    //本周的最后一天
    public String weekEnd = DateUtil.format(DateUtil.offsetDay(date, 4), "yyyy-MM-dd");
    //本月的第一天
    public String MonthFirst = PeriodDate.getThisMonthOfFirstDate(0);
    //本月的最后一天
    public String MonthEnd = PeriodDate.getThisMouthLastDay();
    //本季度的最后一天
    public String lastdateTimSeason = PeriodDate.getCurrQuarter(Integer.valueOf(PeriodDate.getQuarter()))[1];
    //本季度的第一天
    public String firstdateTimSeason = PeriodDate.getCurrQuarter(Integer.valueOf(PeriodDate.getQuarter()))[0];
    //本月天数
    public int daysInMonth = PeriodDate.getDaysOfMonth();
    public static String changeSqlNotNull(String sql) {
        String[] strings = sql.split(",");
        String returnSql = "";
        for (String str : strings) {
            if (str.contains("''")) {
                returnSql = returnSql + str + ",";
            } else {
                returnSql = returnSql + "ifnull(" + str + ",'') " + str + ",";
            }
        }
        return returnSql.substring(0, returnSql.length() - 1);
    }
    /**
     * 获取两个日期之间的所有日期(字符串格式, 按天计算)
     *
     * @param startTime String 开始时间 yyyy-MM-dd
     * @param endTime   String 结束时间 yyyy-MM-dd
     * @return
     */
    public static List<String> getBetweenDays(String startTime, String endTime) throws ParseException {
        if (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)) {
            return null;
        }
        //1、定义转换格式
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Date start = df.parse(startTime);
        Date end = df.parse(endTime);
        if (StringUtils.isEmpty(start) || StringUtils.isEmpty(end)) {
            return null;
        }
        List<String> result = new ArrayList<String>();
        Calendar tempStart = Calendar.getInstance();
        tempStart.setTime(start);
        tempStart.add(Calendar.DAY_OF_YEAR, 1);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar tempEnd = Calendar.getInstance();
        tempEnd.setTime(end);
        result.add(sdf.format(start));
        while (tempStart.before(tempEnd) || tempStart.equals(tempEnd)) {
            result.add(sdf.format(tempStart.getTime()));
            tempStart.add(Calendar.DAY_OF_YEAR, 1);
        }
        return result;
    }
    /**
     * 本周的第一天
     *
     * @return
     */
    public static String getThisWeekOfFirstDate() {
        SimpleDateFormat format = new SimpleDateFormat(FORMAT_YYYY_MM_DD);
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        return format.format(calendar.getTime());
    }
    /**
     * @param i 为0表示本月,为1表示下月,为-1表示上月
     * @return
     * @throws
     * @Title: DateUtil
     * @Description: 获取本月当前时间(或者上月下月)
     * @author lin
     * @since 2019年12月5日下午4:02:44
     */
    public static String getTime1(Integer i) {
        Calendar calendar = Calendar.getInstance();
        if (i != null) {
            calendar.add(Calendar.MONTH, i);
        }
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DATE);
        return year + "-" + (month + 1) + "-" + day;
    }
    /**
     * @param //i为0表示本月为1表示下月
     * @return
     * @throws
     * @Title: DateUtil
     * @Description: 获取本月第一天(获取本月的第一天)
     * @author lin
     * @since 2019年12月5日下午3:59:55
     */
    public static String getThisMonthOfFirstDate(Integer i) {
        SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd");
        Calendar calendar = Calendar.getInstance();
        if (i != null) {
            calendar.add(Calendar.MONTH, i);
        }
        calendar.set(Calendar.DAY_OF_MONTH, Calendar.SUNDAY);
        return format.format(calendar.getTime());
    }
    /**
     * 获取本月最后一天
     *
     * @return
     */
    public static String getThisMouthLastDay() {
        //设置时间格式
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        //获得实体类
        Calendar ca = Calendar.getInstance();
        //设置最后一天
        ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
        //最后一天格式化
        String lastDay = format.format(ca.getTime());
        return lastDay;
    }
    /**
     * 某一个月第一天和最后一天
     *
     * @param date               指定日期
     * @param pattern            日期格式
     * @param //isNeedHms是否需要时分秒
     * @return
     */
    public static Map<String, Object> getFirstLastDayByMonth(Date date,
                                                             String pattern, boolean isNeedHms) {
        SimpleDateFormat df = new SimpleDateFormat(pattern);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        Date theDate = calendar.getTime();
        // 第一天
        GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance();
        gcLast.setTime(theDate);
        gcLast.set(Calendar.DAY_OF_MONTH, 1);
        String day_first = df.format(gcLast.getTime());
        StringBuffer str = new StringBuffer().append(day_first);
        if (isNeedHms) {
            str.append(" 00:00:00");
        }
        day_first = str.toString();
        // 最后一天
        calendar.add(Calendar.MONTH, 1); // 加一个月
        calendar.set(Calendar.DATE, 1); // 设置为该月第一天
        calendar.add(Calendar.DATE, -1); // 再减一天即为上个月最后一天
        String day_last = df.format(calendar.getTime());
        StringBuffer endStr = new StringBuffer().append(day_last);
        if (isNeedHms) {
            endStr.append(" 23:59:59");
        }
        day_last = endStr.toString();
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("first", day_first);
        map.put("last", day_last);
        return map;
    }
    /**
     * 获取当前季度
     */
    public static String getQuarter() {
        Calendar c = Calendar.getInstance();
        int month = c.get(Calendar.MONTH) + 1;
        int quarter = 0;
        if (month >= 1 && month <= 3) {
            quarter = 1;
        } else if (month >= 4 && month <= 6) {
            quarter = 2;
        } else if (month >= 7 && month <= 9) {
            quarter = 3;
        } else {
            quarter = 4;
        }
        return quarter + "";
    }
    /**
     * 获取某季度的第一天和最后一天
     *
     * @param //num第几季度
     */
    public static String[] getCurrQuarter(int num) {
        String[] s = new String[2];
        String str = "";
        // 设置本年的季
        Calendar quarterCalendar = null;
        switch (num) {
            case 1: // 本年到现在经过了一个季度,在加上前4个季度
                quarterCalendar = Calendar.getInstance();
                quarterCalendar.set(Calendar.MONTH, 3);
                quarterCalendar.set(Calendar.DATE, 1);
                quarterCalendar.add(Calendar.DATE, -1);
                str = PeriodDate.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
                s[0] = str.substring(0, str.length() - 5) + "01-01";
                s[1] = str;
                break;
            case 2: // 本年到现在经过了二个季度,在加上前三个季度
                quarterCalendar = Calendar.getInstance();
                quarterCalendar.set(Calendar.MONTH, 6);
                quarterCalendar.set(Calendar.DATE, 1);
                quarterCalendar.add(Calendar.DATE, -1);
                str = PeriodDate.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
                s[0] = str.substring(0, str.length() - 5) + "04-01";
                s[1] = str;
                break;
            case 3:// 本年到现在经过了三个季度,在加上前二个季度
                quarterCalendar = Calendar.getInstance();
                quarterCalendar.set(Calendar.MONTH, 9);
                quarterCalendar.set(Calendar.DATE, 1);
                quarterCalendar.add(Calendar.DATE, -1);
                str = PeriodDate.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
                s[0] = str.substring(0, str.length() - 5) + "07-01";
                s[1] = str;
                break;
            case 4:// 本年到现在经过了四个季度,在加上前一个季度
                quarterCalendar = Calendar.getInstance();
                str = PeriodDate.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
                s[0] = str.substring(0, str.length() - 5) + "10-01";
                s[1] = str.substring(0, str.length() - 5) + "12-31";
                break;
        }
        return s;
    }
    /**
     * 用途:以指定的格式格式化日期字符串
     *
     * @param pattern     字符串的格式
     * @param currentDate 被格式化日期
     * @return String 已格式化的日期字符串
     * @throws NullPointerException 如果参数为空
     */
    public static String formatDate(Date currentDate, String pattern) {
        if (currentDate == null || "".equals(pattern) || pattern == null) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(currentDate);
    }
    /**
     * @return java.util.List<java.lang.String>
     * @Author Lin
     * @Description
     * @Date 2021/3/10 14:17
     * @Param []
     **/
    public static List<String> getStartDateToEndDate(String startDate, String endDate) {
        List<String> betweenDays = null;
        try {
            betweenDays = PeriodDate.getBetweenDays(startDate, endDate);
            System.out.println(betweenDays);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return betweenDays;
    }
    /**
     * @return int
     * @Author Lin
     * @Description 本月天数
     * @Date 2021/3/10 14:48
     * @Param [date]
     **/
    public static int getDaysOfMonth() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    }
}
dujy-modules/dujy-demo/src/main/resources/mapper/demo/RsDangerInfoMapper.xml
@@ -4,4 +4,19 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.demo.mapper.RsDangerInfoMapper">
    <resultMap id="DangerInfoList" type="org.dromara.demo.domain.vo.RsDangerInfoVo">
        <id column="id" jdbcType="VARCHAR" property="id" />
        <result column="notification_time" jdbcType="VARCHAR" property="notificationTime" />
        <result column="danger_type" jdbcType="VARCHAR" property="dangerType" />
        <result column="accountability_unit" jdbcType="VARCHAR" property="accountabilityUnit" />
        <result column="rectification_time_limit" jdbcType="VARCHAR" property="rectificationTimeLimit" />
        <result column="performance" jdbcType="VARCHAR" property="performance" />
        <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
        <result column="status" jdbcType="INTEGER" property="status" />
        <collection property="imgList" ofType="org.dromara.system.domain.vo.SysOssVo"/>
    </resultMap>
    <select id="getDangerInfo" resultMap="DangerInfoList">
        select * from rs_danger_info a left join sys_oss b on a.id = b.tenant_id where `status` = 1 order by a.create_time, b.create_time
    </select>
</mapper>
dujy-modules/dujy-demo/src/main/resources/mapper/demo/RsDangerTotalMapper.xml
@@ -10,5 +10,12 @@
        where status = 1
    </select>
    <select id="getDangerTotalInfo" resultType="org.dromara.demo.domain.vo.RsDangerTotalVo">
        select *
        from rs_danger_total
        where period_date >= SUBSTRING(#{periodDate}, 1, 7)
          and status = 1
        order by create_time desc
    </select>
</mapper>
dujy-modules/dujy-demo/src/main/resources/mapper/demo/RsGeographyDataMapper.xml
@@ -4,4 +4,27 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.demo.mapper.RsGeographyDataMapper">
    <select id="getGeographyData" resultType="java.util.Map">
        select b.type, count(id) as nums
        from rs_geography_data a
                 right join (select '事故易发多发路段' as type, 1 as sort
                             union all
                             select '重点旅游通道' as type, 2 as sort
                             union all
                             select '都江堰景区' as type, 3 as sort
                             union all
                             select '警力配备' as type, 4 as sort
                             union all
                             select '打围施工' as type, 5 as sort
                             union all
                             select '交通事故易发点' as type, 6 as sort
                             union all
                             select '重点运输企业' as type, 7 as sort
                             union all
                             select '公交线路' as type, 8 as sort
                             union all
                             select '安全隐患' as type, 9 as sort) b on a.type = b.type and a.status = 1
        group by b.type
        order by b.sort
    </select>
</mapper>
dujy-modules/dujy-demo/src/main/resources/mapper/demo/RsTrafficAccidentMapper.xml
New file
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.demo.mapper.RsTrafficAccidentMapper">
    <select id="getTrafficAccident" resultType="org.dromara.demo.domain.vo.RsTrafficAccidentVo">
        select a.*, b.url from rs_traffic_accident a left join sys_oss b on a.id = b.tenant_id where `status` = 1 order by sequence
    </select>
</mapper>
dujy-modules/dujy-demo/src/main/resources/mapper/demo/RsTrafficIndexMapper.xml
@@ -8,4 +8,14 @@
        select * from rs_target_icon order by id
    </select>
    <select id="getTrafficIndex" resultType="org.dromara.demo.domain.vo.RsTrafficIndexVo">
        select
            *,
            (select url from rs_target_icon a left join sys_oss b on a.id = b.tenant_id where `name` = '指标1图标') as target_one_icon,
            (select url from rs_target_icon a left join sys_oss b on a.id = b.tenant_id where `name` = '指标2图标') as target_two_icon,
            (select url from rs_target_icon a left join sys_oss b on a.id = b.tenant_id where `name` = '指标3图标') as target_three_icon,
            (select url from rs_target_icon a left join sys_oss b on a.id = b.tenant_id where `name` = '指标4图标') as target_four_icon
        from rs_traffic_index where `status` = 1 order by create_time desc limit 1
    </select>
</mapper>
dujy-modules/dujy-demo/src/main/resources/mapper/demo/RsTrafficPropagandaMapper.xml
@@ -8,4 +8,8 @@
        update rs_traffic_propaganda set sequence = sequence + 1 where sequence >= #{sequence} and id != #{id}
    </update>
    <select id="getTrafficPropaganda" resultType="org.dromara.demo.domain.vo.RsTrafficPropagandaVo">
        select a.*, b.url from rs_traffic_propaganda a left join sys_oss b on a.id = b.tenant_id where `status` = 1 order by sequence
    </select>
</mapper>