1:大屏-安全隐患

2:大屏-库区巡查
3:大屏-安全鉴定
4:实时水雨情
6:资料类别新增,根据用户id去判断是否有新增权限
今天燃尽了,不写了
master
yangzhe123 2026-02-03 14:54:54 +08:00
parent e55130b543
commit 13ae539964
21 changed files with 606 additions and 6 deletions

View File

@ -60,4 +60,11 @@ public class DocCategoryController {
String[] strings = docCategoryService.checkPermission(docCategoryId, userId);
return R.ok(strings);
}
@Operation(summary = "根据用户id获取有新增权限的资料类别")
@GetMapping("/getAddPermissionTree/{userId}")
public R<DocCategory> getAddPermissionTree(@PathVariable("userId") Long userId){
DocCategory docCategory = docCategoryService.getAddPermissionTree(userId);
return R.ok(docCategory);
}
}

View File

@ -2,6 +2,8 @@ package com.gunshi.project.ss.controller;
import com.gunshi.core.result.R;
import com.gunshi.project.ss.entity.vo.ScreenRealFlowVo;
import com.gunshi.project.ss.entity.vo.ScreenRealPptnVo;
import com.gunshi.project.ss.entity.vo.ScreenRsvrVo;
import com.gunshi.project.ss.service.ScreenMoniotrService;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -27,4 +29,19 @@ public class ScreenMoniotrController {
List<ScreenRsvrVo> res = screenMoniotrService.getScreenRsvr();
return R.ok(res);
}
//实时雨晴
@GetMapping("/rain")
public R<List<ScreenRealPptnVo>> getRealPptn(){
List<ScreenRealPptnVo> res = screenMoniotrService.gerRealPptn();
return R.ok(res);
}
//出入库流量
@GetMapping("/flow")
public R<List<ScreenRealFlowVo>> getRealFlow(){
List<ScreenRealFlowVo> res = screenMoniotrService.getRealFlow();
return R.ok(res);
}
}

View File

@ -0,0 +1,27 @@
package com.gunshi.project.ss.controller;
import com.gunshi.core.result.R;
import com.gunshi.project.ss.entity.vo.ScreenPatrolVo;
import com.gunshi.project.ss.service.ScreenPatrolService;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
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;
@RestController
@RequestMapping("/screen/patrol")
@Tag(name = "大屏-库区巡查")
public class ScreenPatrolController {
@Autowired
private ScreenPatrolService screenPatrolService;
@GetMapping("/get/{year}")
public R<ScreenPatrolVo> get(@PathVariable("year") Long year) {
ScreenPatrolVo res = screenPatrolService.get(year);
return R.ok(res);
}
}

View File

@ -35,6 +35,12 @@ public class ScreenResponsibilityController {
return R.ok(vo);
}
@GetMapping("/getFxPerson")
public R<List<ResPerson>> getFxPerson(){
List<ResPerson> vo = screenResponsibilityService.getFxPerson();
return R.ok(vo);
}
@GetMapping("/getTraining")
public R<ScreenPositionTrainingVo> getTraining(){

View File

@ -0,0 +1,29 @@
package com.gunshi.project.ss.controller;
import com.gunshi.core.result.R;
import com.gunshi.project.ss.entity.vo.ScreenSecurityHidden;
import com.gunshi.project.ss.service.ScreenSecurityHiddenService;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
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;
@RestController
@RequestMapping("/screen/hidden")
@Tag(name = "大屏-安全隐患")
public class ScreenSecurityHiddenController {
@Autowired
private ScreenSecurityHiddenService screenSecurityHiddenService;
@GetMapping("/get/{year}")
public R<ScreenSecurityHidden> get(@PathVariable("year") Long year){
ScreenSecurityHidden res = screenSecurityHiddenService.get(year);
return R.ok(res);
}
}

View File

@ -1,6 +1,7 @@
package com.gunshi.project.ss.controller;
import com.gunshi.core.result.R;
import com.gunshi.project.ss.entity.vo.ScreenSecurityCheckVo;
import com.gunshi.project.ss.entity.vo.WholeCycleVo;
import com.gunshi.project.ss.service.*;
import io.swagger.v3.oas.annotations.Operation;
@ -28,4 +29,11 @@ public class WholeCycleController {
return R.ok(res);
}
@Operation(description = "大屏-安全鉴定")
@GetMapping("/security")
public R<ScreenSecurityCheckVo> getSecurity(){
ScreenSecurityCheckVo res = wholeCycleService.getSecurity();
return R.ok(res);
}
}

View File

@ -0,0 +1,15 @@
package com.gunshi.project.ss.entity.vo;
import lombok.Data;
@Data
public class ScreenPatrolVo {
//年度巡查次数
private Long yearCount;
//无人机巡查
private Long droneCount;
}

View File

@ -0,0 +1,22 @@
package com.gunshi.project.ss.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class ScreenRealFlowVo {
private String stcd;
private String stnm;
private BigDecimal q;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime tm;
}

View File

@ -0,0 +1,42 @@
package com.gunshi.project.ss.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gunshi.project.ss.common.util.LocalDateTimeConverter;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class ScreenRealPptnVo {
private String stcd;
private String stnm;
//实时雨量
private BigDecimal drp;
//实时雨量时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime tm;
//今日雨量
private BigDecimal todayDrp;
//昨日雨量
private BigDecimal yesterdayDrp;
//24h雨量
private BigDecimal drp24;
//48h雨量
private BigDecimal drp48;
//72h雨量
private BigDecimal drp72;
}

View File

@ -1,9 +1,11 @@
package com.gunshi.project.ss.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class ScreenRsvrVo {
@ -37,4 +39,6 @@ public class ScreenRsvrVo {
// 0 不变 1上升 2下降
private Integer status;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime tm;
}

View File

@ -0,0 +1,29 @@
package com.gunshi.project.ss.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gunshi.core.dateformat.DateFormatString;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDate;
import java.util.Date;
@Data
public class ScreenSecurityCheckVo {
/**
*
*/
@Schema(description="大坝安全评定类别(一类坝 二类坝 三类坝)")
private String identifyType;
@Schema(description="鉴定日期")
@JsonFormat(pattern = DateFormatString.YYYY, timezone = "GMT+8")
private Date identifyDate;
@Schema(description = "下次鉴定时间")
@JsonFormat(pattern = "yyyy")
private LocalDate nextVerifyDate;
}

View File

@ -0,0 +1,28 @@
package com.gunshi.project.ss.entity.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Map;
@Data
public class ScreenSecurityHidden {
//隐患总数
private Long totalCount;
//已整改
private Long finishCount;
//未整改
private Long noFinishCount;
//整改率
private BigDecimal finishPercent;
//月份柱状图
private Map<Integer,Long> months;
}

View File

@ -50,6 +50,39 @@ public interface InspectTaskMapper extends BaseMapper<InspectTask> {
""")
Page<InspectTask> pageQuery(Page<InspectTask> page,@Param("obj") InspectTaskPageSo pageSo);
@Select("""
<script>
with m1 as (
select t.* from public.inspect_task t
<where>
<if test="obj.createUserId != null ">
t.create_user_id = #{obj.createUserId}
</if>
<if test="obj.status != null ">
and t.status = #{obj.status}
</if>
<if test="obj.taskType != null ">
and t.task_type = #{obj.taskType}
</if>
<if test="obj.dateTimeRangeSo != null and obj.dateTimeRangeSo.start != null">
and t.create_time <![CDATA[>=]]> #{obj.dateTimeRangeSo.start}
</if>
<if test="obj.dateTimeRangeSo != null and obj.dateTimeRangeSo.end != null">
and t.create_time <![CDATA[<=]]> #{obj.dateTimeRangeSo.end}
</if>
</where>
),
m2 as (select task_id,count(is_normal) as problemNum from inspect_task_detail where is_normal = 0 GROUP BY task_id),
m3 as (select task_id,count(is_handle) as handleNum from inspect_task_detail where is_handle = 0 GROUP BY task_id)
select m1.*,m2.problemNum,m3.handleNum from m1
left join m2 on m1.id = m2.task_id
left join m3 on m1.id = m3.task_id
order by m1.create_time desc
</script>
""")
List<InspectTask> listQuery(@Param("obj") InspectTaskPageSo pageSo);
@Select("""
select count(is_handle) as handleNum from inspect_task_detail where is_handle = 0
AND task_id = #{taskId}

View File

@ -14,10 +14,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.*;
import java.util.stream.Collectors;
@Service
@ -67,7 +64,7 @@ public class DocCategoryService extends ServiceImpl<DocCategoryMapper, DocCatego
//判断赋予的权限
if(pop.getLevel() != null && pop.getLevel() == 3){
//只有最后一层才有权限
List<DocPermissionConfig> permissions = docPermissionConfigService.getPermissionByDocId(pop.getId());
List<DocPermissionConfig> permissions = docPermissionConfigService.getPermissionByDocId(pop.getId());
pop.setPermissions(permissions);
}
childrens.forEach(item -> {docCategoryDeque.add(item);});
@ -77,6 +74,8 @@ public class DocCategoryService extends ServiceImpl<DocCategoryMapper, DocCatego
return docCategory;
}
public UserRoleVo getAllUserAndRole() {
return docPermissionConfigService.getAllUserAndRole();
}
@ -172,4 +171,42 @@ public class DocCategoryService extends ServiceImpl<DocCategoryMapper, DocCatego
List<DocCategory> res = this.baseMapper.findCategoryPathRecursive(docCategoryId);
return res;
}
public DocCategory getAddPermissionTree(Long userId) {
LambdaQueryWrapper<DocCategory> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DocCategory::getParentId,0);
queryWrapper.last("limit 1");
DocCategory docCategory = docCategoryMapper.selectOne(queryWrapper);
List<DocCategory> allList = docCategoryMapper.selectList(null);
buildTreeWithUserId(docCategory,allList,userId);
return docCategory;
}
private DocCategory buildTreeWithUserId(DocCategory docCategory,List<DocCategory> allList,Long userId) {
Queue<DocCategory> docCategoryDeque = new LinkedList<>();
if(docCategory != null){
docCategoryDeque.add(docCategory);
}
while(!docCategoryDeque.isEmpty()){
int size = docCategoryDeque.size();
while(size > 0){
DocCategory pop = docCategoryDeque.remove();
List<DocCategory> childrens = allList.stream().filter(o -> {
return o.getParentId().equals(pop.getId());
}).sorted(Comparator.comparing(DocCategory::getSortOrder)) // 升序排列
.collect(Collectors.toList());
pop.setChildren(childrens);
//判断赋予的权限
if(pop.getLevel() != null && pop.getLevel() == 3){
//只有最后一层才有权限
List<DocPermissionConfig> permissions = docPermissionConfigService.getPermissionByDocIdAndUserId(pop.getId(),userId);
//TODO 目前level==3就是最后一层也就是叶子节点
pop.setPermissions(permissions);
}
childrens.forEach(item -> {docCategoryDeque.add(item);});
size--;
}
}
return docCategory;
}
}

View File

@ -16,6 +16,7 @@ import com.ruoyi.system.mapper.SysDeptMapper;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.mapper.SysUserRoleMapper;
import jakarta.validation.constraints.NotNull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -226,4 +227,54 @@ public class DocPermissionConfigService extends ServiceImpl<DocPermissionConfigM
queryWrapper.eq(DocPermissionConfig::getCategoryId,docCatrgoryId);
this.baseMapper.delete(queryWrapper);
}
public List<DocPermissionConfig> getPermissionByDocIdAndUserId(Long docId, Long userId) {
SysUser sysUser = sysUserMapper.selectUserById(userId);
if(sysUser == null){
throw new IllegalArgumentException("对不起,该用户不存在");
}
//获取用户角色
List<SysRole> roles = sysUser.getRoles();
SysRole sysRole = roles.get(0);
LambdaQueryWrapper<DocPermissionConfig> queryUserWrapper = new LambdaQueryWrapper<>();
queryUserWrapper.eq(DocPermissionConfig::getTargetType,2)
.eq(DocPermissionConfig::getTargerId,userId)
.eq(DocPermissionConfig::getCategoryId,docId)
.last("limit 1");
DocPermissionConfig docPermissionConfig = this.baseMapper.selectOne(queryUserWrapper);
if(docPermissionConfig != null){
//如果用户能查到
String permissionCode = docPermissionConfig.getPermissionCode();
if(StringUtils.isNotEmpty(permissionCode)){
String[] split = permissionCode.split(",");
List<String> permissionList = Arrays.asList(split);
if(!permissionList.contains("add")){
return new ArrayList<>();
}
docPermissionConfig.setPermissions(permissionList);
}
}else{
//如果用户查不到,就说明没有配置过权限,或者说配置的是角色(一个叶子节点分类不可能同时配置 用户和角色 2种情况的权限
LambdaQueryWrapper<DocPermissionConfig> queryRoleWrapper = new LambdaQueryWrapper<>();
queryRoleWrapper.eq(DocPermissionConfig::getTargetType,1)
.eq(DocPermissionConfig::getTargerId,sysRole.getRoleId())
.eq(DocPermissionConfig::getCategoryId,docId)
.last("limit 1");
docPermissionConfig = this.baseMapper.selectOne(queryRoleWrapper);
if(docPermissionConfig != null){
String permissionCode = docPermissionConfig.getPermissionCode();
if(StringUtils.isNotEmpty(permissionCode)){
String[] split = permissionCode.split(",");
List<String> permissionList = Arrays.asList(split);
if(!permissionList.contains("add")){
return new ArrayList<>();
}
docPermissionConfig.setPermissions(permissionList);
}
}else{
return new ArrayList<>();
}
}
return Arrays.asList(docPermissionConfig);
}
}

View File

@ -1,6 +1,7 @@
package com.gunshi.project.ss.service;
import cn.hutool.core.bean.BeanUtil;
import com.gunshi.project.ss.common.util.LocalDateTimeConverter;
import com.gunshi.project.ss.entity.so.StPptnSo;
import com.gunshi.project.ss.entity.so.WeatherSo;
import com.gunshi.project.ss.entity.vo.*;
@ -436,7 +437,7 @@ public class RainBasinDivisionService {
* @param time
* @return
*/
private BigDecimal queryTodayDrpByStcdAndTime(String stcd, Date time) {
public BigDecimal queryTodayDrpByStcdAndTime(String stcd, Date time) {
LocalDateTime now = LocalDateTime.ofInstant(time.toInstant(), ZoneId.systemDefault());
LocalDateTime startTime;
LocalDateTime endTime;
@ -688,4 +689,21 @@ public class RainBasinDivisionService {
}
public BigDecimal queryLast24HoursDrpByStcdAndTime(String stcd, Date date) {
LocalDateTime end = LocalDateTimeConverter.fromDate(date);
LocalDateTime start = end.minusDays(1);
return stPptnRMapper.queryStPptnTimeQuantumByStcdAndTime(stcd,LocalDateTimeConverter.toDate(start),LocalDateTimeConverter.toDate(end));
}
public BigDecimal queryLast48HoursDrpByStcdAndTime(String stcd, Date date) {
LocalDateTime end = LocalDateTimeConverter.fromDate(date);
LocalDateTime start = end.minusDays(2);
return stPptnRMapper.queryStPptnTimeQuantumByStcdAndTime(stcd,LocalDateTimeConverter.toDate(start),LocalDateTimeConverter.toDate(end));
}
public BigDecimal queryLast72HoursDrpByStcdAndTime(String stcd, Date date) {
LocalDateTime end = LocalDateTimeConverter.fromDate(date);
LocalDateTime start = end.minusDays(3);
return stPptnRMapper.queryStPptnTimeQuantumByStcdAndTime(stcd,LocalDateTimeConverter.toDate(start),LocalDateTimeConverter.toDate(end));
}
}

View File

@ -1,16 +1,25 @@
package com.gunshi.project.ss.service;
import com.gunshi.project.ss.common.mapper.StPptnRRealMapper;
import com.gunshi.project.ss.common.model.StFlowR;
import com.gunshi.project.ss.common.model.StPptnRReal;
import com.gunshi.project.ss.common.model.StRsvrR;
import com.gunshi.project.ss.common.model.StStbprpB;
import com.gunshi.project.ss.common.util.LocalDateTimeConverter;
import com.gunshi.project.ss.entity.vo.AttResBaseVo;
import com.gunshi.project.ss.entity.vo.ScreenRealFlowVo;
import com.gunshi.project.ss.entity.vo.ScreenRealPptnVo;
import com.gunshi.project.ss.entity.vo.ScreenRsvrVo;
import com.gunshi.project.ss.mapper.RealRainMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@ -66,6 +75,7 @@ public class ScreenMoniotrService {
if(one == null){
entity.setStatus(0);
}else{
entity.setTm(LocalDateTimeConverter.fromDate(one.getTm()));
//如果过去时刻水位高于当前水位 ->表示下降
String lastRz = one.getRz();
BigDecimal decimalRz = new BigDecimal(lastRz);
@ -82,4 +92,66 @@ public class ScreenMoniotrService {
}
return res;
}
@Autowired
private RealRainMapper realRainMapper;
@Autowired
private RainBasinDivisionService rainBasinDivisionService;
public List<ScreenRealPptnVo> gerRealPptn() {
List<StStbprpB> pptnStations = stStbprpBService.getPptnStations();
List<ScreenRealPptnVo> res = new ArrayList<>();
for (StStbprpB pptnStation : pptnStations) {
ScreenRealPptnVo vo = new ScreenRealPptnVo();
vo.setStcd(pptnStation.getStcd());
vo.setStnm(pptnStation.getStnm());
StPptnRReal stPptnRReal = realRainMapper.queryPptnByStcd(vo.getStcd());
if(stPptnRReal != null){
Date tm = stPptnRReal.getTm();
LocalDateTime nowTime = LocalDateTime.now();
LocalDateTime latestTime = LocalDateTime.ofInstant(tm.toInstant(), ZoneId.systemDefault());
boolean isToday = latestTime.toLocalDate().equals(nowTime.toLocalDate());
if(isToday){
Date date = new Date();
//今日雨量
BigDecimal todayDrp = rainBasinDivisionService.queryTodayDrpByStcdAndTime(vo.getStcd(), date);
vo.setTodayDrp(todayDrp);
//昨日雨量
BigDecimal yesterdayDrp = rainBasinDivisionService.queryYesterdayDrpByStcdAndTime(vo.getStcd(), date);
vo.setYesterdayDrp(yesterdayDrp);
//24h雨量
BigDecimal drp24 = rainBasinDivisionService.queryLast24HoursDrpByStcdAndTime(vo.getStcd(),date);
vo.setDrp24(drp24);
//48h雨量
BigDecimal drp48 = rainBasinDivisionService.queryLast48HoursDrpByStcdAndTime(vo.getStcd(),date);
vo.setDrp48(drp48);
//72h雨量
BigDecimal drp72 = rainBasinDivisionService.queryLast72HoursDrpByStcdAndTime(vo.getStcd(),date);
vo.setDrp72(drp72);
}
}
res.add(vo);
}
return res;
}
@Autowired
private StFlowRService stFlowRService;
public List<ScreenRealFlowVo> getRealFlow() {
List<ScreenRealFlowVo> res = new ArrayList<>();
List<StStbprpB> flowStations = stStbprpBService.getFlowStations();
for (StStbprpB flowStation : flowStations) {
ScreenRealFlowVo vo = new ScreenRealFlowVo();
vo.setStcd(flowStation.getStcd());
vo.setStnm(flowStation.getStnm());
StFlowR newDataByStcd = stFlowRService.getNewDataByStcd(flowStation.getStcd());
if(newDataByStcd != null){
vo.setQ(newDataByStcd.getQ());
vo.setTm(newDataByStcd.getTm());
}
res.add(vo);
}
return res;
}
}

View File

@ -0,0 +1,52 @@
package com.gunshi.project.ss.service;
import com.gunshi.db.dto.DateTimeRangeSo;
import com.gunshi.project.ss.common.model.InspectTask;
import com.gunshi.project.ss.entity.so.InspectTaskPageSo;
import com.gunshi.project.ss.entity.vo.ScreenPatrolVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.List;
@Slf4j
@Service
public class ScreenPatrolService {
@Autowired
private InspectTaskService service;
public void fillPageSoData(InspectTaskPageSo pageSo,Long year){
pageSo.setStatus(2);//已完成
DateTimeRangeSo dateTimeRangeSo = new DateTimeRangeSo();
// 使用LocalDate设置开始和结束日期
LocalDate startDate = LocalDate.of(year.intValue(), 1, 1); // 当年1月1日
LocalDate endDate = LocalDate.of(year.intValue(), 12, 31); // 当年12月31日
dateTimeRangeSo.setStart(Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant()));
dateTimeRangeSo.setEnd(Date.from(endDate.atTime(LocalTime.MAX).atZone(ZoneId.systemDefault()).toInstant()));
pageSo.setDateTimeRangeSo(dateTimeRangeSo);
}
public ScreenPatrolVo get(Long year) {
ScreenPatrolVo res = new ScreenPatrolVo();
InspectTaskPageSo pageSo = new InspectTaskPageSo();
fillPageSoData(pageSo,year);
List<InspectTask> inspectTasks = service.getBaseMapper().listQuery(pageSo);
res.setYearCount(Long.valueOf(inspectTasks.size()));
//TODO 无人机次数,需要把无人机的需求完成,才能做
res.setDroneCount(0l);
return res;
}
}

View File

@ -62,4 +62,11 @@ public class ScreenResponsibilityService {
.list();
return list;
}
public List<ResPerson> getFxPerson() {
List<ResPerson> list = resPersonService.lambdaQuery().in(ResPerson::getType, Arrays.asList(0, 3, 4))
.orderByDesc(ResPerson::getCreateTime)
.list();
return list;
}
}

View File

@ -0,0 +1,65 @@
package com.gunshi.project.ss.service;
import com.gunshi.project.ss.common.util.LocalDateTimeConverter;
import com.gunshi.project.ss.entity.vo.ScreenSecurityHidden;
import com.gunshi.project.ss.model.SafetyHazardInvest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@Service
@Slf4j
public class ScreenSecurityHiddenService {
@Autowired
private SafetyHazardInvestService safetyHazardInvestService;
public ScreenSecurityHidden get(Long year) {
Map<Integer,Long> months = new LinkedHashMap<>();
for (int month = 1; month <= 12; month++) {
months.put(month, 0L);
}
ScreenSecurityHidden vo = new ScreenSecurityHidden();
// 使用LocalDate设置开始和结束日期
LocalDateTime startDate = LocalDateTime.of(year.intValue(), 1, 1,0,0 ); // 当年1月1日
LocalDateTime endDate = LocalDateTime.of(year.intValue(), 12, 31,23,59,59); // 当年12月31日
List<SafetyHazardInvest> list = safetyHazardInvestService.lambdaQuery()
.ge(SafetyHazardInvest::getHazardDate, LocalDateTimeConverter.toDate(startDate))
.le(SafetyHazardInvest::getHazardDate, LocalDateTimeConverter.toDate(endDate))
.orderByAsc(SafetyHazardInvest::getHazardDate)
.list();
if(list.isEmpty()){
vo.setFinishPercent(new BigDecimal("0.00"));
vo.setMonths(months);
vo.setTotalCount(0l);
vo.setFinishCount(0l);
vo.setNoFinishCount(0l);
return vo;
}
vo.setTotalCount(Long.valueOf(list.size()));
List<SafetyHazardInvest> isFinish = list.stream().filter(o -> o.getRecityFinishDate() != null).collect(Collectors.toList());
vo.setFinishCount(Long.valueOf(isFinish.size()));
vo.setNoFinishCount(vo.getTotalCount() - vo.getFinishCount());
vo.setFinishPercent(new BigDecimal(isFinish.size()).divide(new BigDecimal(list.size()), 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")));
list.forEach(item -> {
if (item.getHazardDate() != null) {
Calendar cal = Calendar.getInstance();
cal.setTime(item.getHazardDate());
int month = cal.get(Calendar.MONTH) + 1; // Calendar月份从0开始
months.put(month, months.get(month) + 1);
}
});
vo.setMonths(months);
return vo;
}
}

View File

@ -1,6 +1,9 @@
package com.gunshi.project.ss.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.gunshi.project.ss.entity.vo.ScreenSecurityCheckVo;
import com.gunshi.project.ss.entity.vo.WholeCycleVo;
import com.gunshi.project.ss.model.*;
import lombok.extern.slf4j.Slf4j;
@ -98,4 +101,32 @@ public class WholeCycleService {
res.setEmergencyFileIds(emergencyFileIds);
return res;
}
@Autowired
private SafetyIdentifyService service;//鉴定时间
public ScreenSecurityCheckVo getSecurity() {
ScreenSecurityCheckVo res = new ScreenSecurityCheckVo();
SafetyIdentify one = safetyIdentifyService.lambdaQuery().orderByDesc(SafetyIdentify::getIdentifyDate).last("limit 1").one();
//安全鉴定
if(one == null || one.getIdentifyType() == null){
res.setIdentifyType("无");
}else{
if(one.getIdentifyType() == 1){
res.setIdentifyType("一类坝");
}else if(one.getIdentifyType() == 2){
res.setIdentifyType("二类坝");
}else if(one.getIdentifyType() == 3){
res.setIdentifyType("三类坝");
}
}
SafetyIdentify safetyIdentify = service.lambdaQuery().orderByDesc(SafetyIdentify::getIdentifyDate)
.last("limit 1").one();
if(safetyIdentify != null){
res.setIdentifyDate(safetyIdentify.getIdentifyDate());
res.setNextVerifyDate(safetyIdentify.getNextVerifyDate());
}
return res;
}
}