质安管理
This commit is contained in:
@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -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;
|
||||
|
||||
|
||||
}
|
||||
@ -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;
|
||||
|
||||
|
||||
}
|
||||
@ -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;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user