质安管理

This commit is contained in:
zzz
2025-12-16 11:34:41 +08:00
parent aa3628f041
commit de6d100f79
8 changed files with 471 additions and 2 deletions

View File

@ -0,0 +1,66 @@
package org.dromara.bigscreen.controller;
import lombok.RequiredArgsConstructor;
import org.dromara.bigscreen.domain.bo.DpznglBo;
import org.dromara.bigscreen.domain.vo.DpznglAqyVo;
import org.dromara.bigscreen.domain.vo.DpznglVo;
import org.dromara.bigscreen.service.DpzaglService;
import org.dromara.common.core.domain.R;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 大屏-质安管理
*
* @author Lion Li
* @date 2025-11-05
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/dpzagl")
public class DpzaglController {
private final DpzaglService dpzaglService;
/**
* 查询大屏-质安管理-站班会,巡检工单,整改情况
*/
@GetMapping("/list")
public R<DpznglVo> list(DpznglBo bo) {
return R.ok(dpzaglService.queryList(bo));
}
/**
* 查询大屏-质安管理-站班会
*/
@GetMapping("/listByzbh")
public R<DpznglVo> listByzbh(DpznglBo bo) {
return R.ok(dpzaglService.listByzbh(bo));
}
/**
* 查询大屏-质安管理-安全员分布情况
*/
@GetMapping("/listByAqy")
public R<List<DpznglAqyVo>> listByAqy(DpznglBo bo) {
return R.ok(dpzaglService.listByAqy(bo));
}
}

View File

@ -0,0 +1,28 @@
package org.dromara.bigscreen.domain.bo;
import lombok.Data;
import java.io.Serializable;
@Data
public class DpznglBo implements Serializable {
/**
* 分页大小
*/
private Integer pageSize = 10;
/**
* 当前页数
*/
private Integer pageNum = 1;
/**
* 项目id
*/
private Long projectId;
}

View File

@ -0,0 +1,31 @@
package org.dromara.bigscreen.domain.vo;
import com.google.type.Decimal;
import lombok.Data;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class DpznglAqyVo implements Serializable {
private Long userId;
@Translation(type = TransConstant.XZD_KHXX_ID_TO_NAME, mapper = "userId")
private String userName;
/**
* 经度
*/
private BigDecimal locLatitude;
/**
* 纬度
*/
private BigDecimal locLongitude;
}

View File

@ -0,0 +1,103 @@
package org.dromara.bigscreen.domain.vo;
import lombok.Data;
import org.dromara.quality.domain.vo.qualityinspection.QltQualityInspectionVo;
import org.dromara.safety.domain.vo.safetyinspection.HseSafetyInspectionVo;
import org.dromara.safety.domain.vo.teammeeting.HseTeamMeetingVo;
import java.io.Serializable;
import java.util.List;
@Data
public class DpznglVo implements Serializable {
/**
* 站班会
*/
private List<HseTeamMeetingVo> zbhList;
// 质量管理
/**
* 质量总数
*/
private Long zlZS;
/**
* 质量数据
*/
private List<QltQualityInspectionVo> zlList;
/**
* 质量 专项检查
*/
private Long zxjcZl;
/**
* 质量 定期检查
*/
private Long dqjcZl;
/**
* 质量 日常巡检
*/
private Long rcxjZl;
/**
* 质量 整改数量
*/
private Long zlZgsl;
/**
* 质量数据-整改
*/
private List<QltQualityInspectionVo> zlZgList;
// 安全管理
/**
* 安全总数
*/
private Long aqZS;
/**
* 安全数据
*/
private List<HseSafetyInspectionVo> aqList;
/**
* 安全 专项检查
*/
private Long zxjcAq;
/**
* 安全定期检查
*/
private Long dqjcAq;
/**
* 安全 日常巡检
*/
private Long rcxjAq;
/**
* 安全 整改数量
*/
private Long aqZgsl;
/**
* 安全数据-整改
*/
private List<HseSafetyInspectionVo> aqZgList;
}

View File

@ -3,8 +3,10 @@ package org.dromara.bigscreen.enums;
public enum DpEnum {
ZLGLLX_ZXGL("专项检查", "1"),
ZLGLLX_DQJC("专项检查", "2"),
ZLGLLX_RCXJ("专项检查", "3");
ZLGLLX_DQJC("定期检查", "2"),
ZLGLLX_RCXJ("日常巡检", "3"),
ZLGDZT_ZG("工单状态-整改", "2"),
JSLX_AQY("角色类型-安全员", "SAFETY_OFFICER");
private final String TypeName;

View File

@ -0,0 +1,28 @@
package org.dromara.bigscreen.service;
import org.dromara.bigscreen.domain.bo.DpznglBo;
import org.dromara.bigscreen.domain.vo.DpznglAqyVo;
import org.dromara.bigscreen.domain.vo.DpznglVo;
import java.util.List;
/**
* 大屏-质安管理
*
* @author Lion Li
* @date 2025-11-05
*/
public interface DpzaglService {
/**
* 查询大屏-质安管理-站班会,巡检工单,整改情况
*/
DpznglVo queryList(DpznglBo bo);
/**
* 查询大屏-质安管理-安全员分布情况
*/
List<DpznglAqyVo> listByAqy(DpznglBo bo);
DpznglVo listByzbh(DpznglBo bo);
}

View File

@ -0,0 +1,198 @@
package org.dromara.bigscreen.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.bigscreen.domain.bo.DpznglBo;
import org.dromara.bigscreen.domain.vo.DpznglAqyVo;
import org.dromara.bigscreen.domain.vo.DpznglVo;
import org.dromara.bigscreen.enums.DpEnum;
import org.dromara.bigscreen.service.DpzaglService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.gps.domain.GpsEquipmentSon;
import org.dromara.gps.mapper.GpsEquipmentSonMapper;
import org.dromara.gps.service.IGpsEquipmentSonService;
import org.dromara.project.domain.BusUserProjectRelevancy;
import org.dromara.project.mapper.BusUserProjectRelevancyMapper;
import org.dromara.quality.domain.QltQualityInspection;
import org.dromara.quality.domain.dto.qualityinspection.QltQualityInspectionQueryReq;
import org.dromara.quality.domain.vo.qualityinspection.QltQualityInspectionVo;
import org.dromara.quality.service.IQltQualityInspectionService;
import org.dromara.safety.domain.HseSafetyInspection;
import org.dromara.safety.domain.dto.safetyinspection.HseSafetyInspectionQueryReq;
import org.dromara.safety.domain.dto.teammeeting.HseTeamMeetingQueryReq;
import org.dromara.safety.domain.vo.safetyinspection.HseSafetyInspectionVo;
import org.dromara.safety.domain.vo.teammeeting.HseTeamMeetingVo;
import org.dromara.safety.service.IHseSafetyInspectionService;
import org.dromara.safety.service.IHseTeamMeetingService;
import org.dromara.system.domain.SysRole;
import org.dromara.system.domain.SysUserRole;
import org.dromara.system.mapper.SysRoleMapper;
import org.dromara.system.mapper.SysUserRoleMapper;
import org.dromara.system.service.ISysRoleService;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 大屏-质安管理
*
* @author Lion Li
* @date 2025-11-05
*/
@RequiredArgsConstructor
@Service
@Slf4j
public class DpzaglServiceImpl implements DpzaglService {
//站班会
private final IHseTeamMeetingService teamMeetingService;
//质量-检查工单
private final IQltQualityInspectionService qualityInspectionService;
// 安全工单
private final IHseSafetyInspectionService safetyInspectionService;
private final SysRoleMapper sysRoleMapper;
private final SysUserRoleMapper sysUserRoleMapper;
private final GpsEquipmentSonMapper gpsEquipmentSonMapper;
private final BusUserProjectRelevancyMapper busUserProjectRelevancyMapper;
@Override
public DpznglVo queryList(DpznglBo bo) {
DpznglVo dpznglVo = new DpznglVo();
PageQuery pageQuery = new PageQuery(bo.getPageSize(),bo.getPageNum());
// 质量
saveZl(pageQuery,dpznglVo);
// 安全
saveAq(pageQuery,dpznglVo);
return dpznglVo;
}
@Override
public List<DpznglAqyVo> listByAqy(DpznglBo bo) {
List<DpznglAqyVo> dpznglAqyVos = new ArrayList<>();
if (bo == null || bo.getProjectId() == null) throw new RuntimeException("项目不能为空");
//// 查询该项目下的人员id
// List<BusUserProjectRelevancy> busUserProjectRelevancies = busUserProjectRelevancyMapper.selectList(new LambdaQueryWrapper<BusUserProjectRelevancy>().eq(BusUserProjectRelevancy::getProjectId, bo.getProjectId()));
// if (busUserProjectRelevancies == null || busUserProjectRelevancies.size() == 0){
// return dpznglAqyVos;
// }
// 查询拥有安全员的角色
List<SysRole> sysRoles = sysRoleMapper.selectList(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleIdentity, DpEnum.JSLX_AQY.getTypeValue()));
if (sysRoles == null || sysRoles.size() == 0){
return dpznglAqyVos;
}
// 根据角色查询人员
List<Long> roles = sysRoles.stream().map(SysRole::getRoleId).collect(Collectors.toList());
List<SysUserRole> sysUserRoles = sysUserRoleMapper.selectList(new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getRoleId, roles).groupBy(SysUserRole::getUserId));
if (sysUserRoles == null && sysUserRoles.size() == 0){
return dpznglAqyVos;
}
// 查询人员的最新经纬度
List<Long> collect = sysUserRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
if (collect == null || collect.size() == 0){
return dpznglAqyVos;
}
List<GpsEquipmentSon> temp = gpsEquipmentSonMapper.listByAqy(collect,bo.getProjectId());
if (temp != null && temp.size() > 0){
// 回填数据
dpznglAqyVos = temp.stream().map(gpsEquipmentSon -> {
DpznglAqyVo dpznglAqyVo = new DpznglAqyVo();
dpznglAqyVo.setUserId(gpsEquipmentSon.getUserId());
dpznglAqyVo.setLocLatitude(gpsEquipmentSon.getLocLatitude());
dpznglAqyVo.setLocLongitude(gpsEquipmentSon.getLocLongitude());
return dpznglAqyVo;
}).collect(Collectors.toList());
// 判断是否离岗
}
return dpznglAqyVos;
}
@Override
public DpznglVo listByzbh(DpznglBo bo) {
DpznglVo dpznglVo = new DpznglVo();
// 站班会
HseTeamMeetingQueryReq hseTeamMeetingQueryReq = new HseTeamMeetingQueryReq();
List<HseTeamMeetingVo> hseTeamMeetingVos = teamMeetingService.queryList(hseTeamMeetingQueryReq);
dpznglVo.setZbhList(hseTeamMeetingVos);
return dpznglVo;
}
private void saveAq(PageQuery pageQuery, DpznglVo dpznglVo) {
// 安全 巡检工单,整改情况
HseSafetyInspectionQueryReq req = new HseSafetyInspectionQueryReq();
// 质量展示数据
TableDataInfo<HseSafetyInspectionVo> anList = safetyInspectionService.queryPageList(req, pageQuery);
// 质量展示数据-整改
req.setStatus(DpEnum.ZLGDZT_ZG.getTypeValue());
TableDataInfo<HseSafetyInspectionVo> aqZgList = safetyInspectionService.queryPageList(req, pageQuery);
// 质量总数(用于判断巡检类型)
List<HseSafetyInspection> list = safetyInspectionService.list();
List<HseSafetyInspectionVo> rows = anList.getRows();
if (rows != null && rows.size() > 0){
dpznglVo.setAqZS(anList.getTotal());
dpznglVo.setAqList(rows);
dpznglVo.setZxjcAq(list.stream().filter(zl -> DpEnum.ZLGLLX_ZXGL.getTypeValue().equals(zl.getCheckType())).count());
dpznglVo.setDqjcAq(list.stream().filter(zl -> DpEnum.ZLGLLX_DQJC.getTypeValue().equals(zl.getCheckType())).count());
dpznglVo.setRcxjAq(list.stream().filter(zl -> DpEnum.ZLGLLX_RCXJ.getTypeValue().equals(zl.getCheckType())).count());
dpznglVo.setAqZgsl(list.stream().filter(zl -> DpEnum.ZLGDZT_ZG.getTypeValue().equals(zl.getStatus())).count());
}
if (aqZgList.getRows() != null && aqZgList.getRows().size() > 0){
dpznglVo.setAqZgList(aqZgList.getRows());
}
}
private void saveZl(PageQuery pageQuery,DpznglVo dpznglVo) {
// 质量 巡检工单,整改情况
QltQualityInspectionQueryReq req = new QltQualityInspectionQueryReq();
// 质量展示数据
TableDataInfo<QltQualityInspectionVo> zlLists = qualityInspectionService.queryPageList(req, pageQuery);
// 质量展示数据-整改
req.setInspectionStatus(DpEnum.ZLGDZT_ZG.getTypeValue());
TableDataInfo<QltQualityInspectionVo> zlZgLists = qualityInspectionService.queryPageList(req, pageQuery);
// 质量总数(用于判断巡检类型)
List<QltQualityInspection> zsZl = qualityInspectionService.list();
List<QltQualityInspectionVo> rows = zlLists.getRows();
if (rows != null && rows.size() > 0){
dpznglVo.setZlZS(zlLists.getTotal());
dpznglVo.setZlList(rows);
dpznglVo.setZxjcZl(zsZl.stream().filter(zl -> DpEnum.ZLGLLX_ZXGL.getTypeValue().equals(zl.getInspectionType())).count());
dpznglVo.setDqjcZl(zsZl.stream().filter(zl -> DpEnum.ZLGLLX_DQJC.getTypeValue().equals(zl.getInspectionType())).count());
dpznglVo.setRcxjZl(zsZl.stream().filter(zl -> DpEnum.ZLGLLX_RCXJ.getTypeValue().equals(zl.getInspectionType())).count());
dpznglVo.setZlZgsl(zsZl.stream().filter(zl -> DpEnum.ZLGDZT_ZG.getTypeValue().equals(zl.getInspectionStatus())).count());
}
if (zlZgLists.getRows() != null && zlZgLists.getRows().size() > 0){
dpznglVo.setZlZgList(zlZgLists.getRows());
}
}
}

View File

@ -154,4 +154,17 @@ public interface GpsEquipmentSonMapper extends BaseMapperPlus<GpsEquipmentSon, G
"WHERE\n" +
" rn = 1;")
List<GpsEquipmentSonVo> getUeUserListByProjectId(@Param("startTime") LocalDateTime startOfDay, @Param("endTime") LocalDateTime now);
@Select("<script> SELECT a.user_id , a.loc_latitude, a.loc_longitude" +
"FROM (\n" +
" SELECT user_id , loc_latitude,loc_longitude, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY create_time DESC) AS rn\n" +
" FROM gps_equipment_son\n" +
") a , bus_user_project_relevancy as b WHERE a.user_id = b.user_id and b.project_id = #{projectId} " +
" rn = 1 and user_id IN (<foreach collection=\"collect\" item=\"id\" separator=\",\" open=\"(\" close=\")\">\n" +
" #{id}\n" +
" </foreach>\n" +
" ) GROUP BY a.user_id </script>")
List<GpsEquipmentSon> listByAqy(@Param("collect") List<Long> collect, @Param("projectId") Long projectId);
}