项目管理分析,整体效能分析

This commit is contained in:
马三炮 2026-01-15 10:05:08 +08:00
parent d2d5af2eb2
commit 789c773315
10 changed files with 437 additions and 1 deletions

View File

@ -8,6 +8,7 @@ import com.securitycontrol.common.log.annotation.Log;
import com.securitycontrol.common.log.enums.OperationType; import com.securitycontrol.common.log.enums.OperationType;
import com.securitycontrol.entity.background.dto.ParamDto; import com.securitycontrol.entity.background.dto.ParamDto;
import com.securitycontrol.entity.background.vo.ProjectVo; import com.securitycontrol.entity.background.vo.ProjectVo;
import com.securitycontrol.entity.background.vo.SjProjectMassVo;
import com.securitycontrol.entity.background.vo.SjProjectQualityVo; import com.securitycontrol.entity.background.vo.SjProjectQualityVo;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -71,4 +72,42 @@ public class SjProjectQualityController extends BaseController {
} }
@ApiOperation(value = "查询工程质量分析列表数据")
@GetMapping("newList")
@Log(title = "数据分析", menu = "数据分析->工程质量分析", grade = OperationType.QUERY_BUSINESS, details = "查询工程质量分析数据", type = "业务日志")
public TableDataInfo getNewList(SjProjectMassVo dto) {
startPage();
List<SjProjectMassVo> list = new ArrayList<>();
list = service.getNewList(dto);
return getDataTable(list);
}
@ApiOperation(value = "新增工程质量分析数据")
@PostMapping("newAddData")
@Log(title = "数据分析", menu = "数据分析->工程质量分析", grade = OperationType.ADD_BUSINESS, details = "新增数据", type = "业务日志")
public AjaxResult newAddData(@RequestBody SjProjectMassVo vo) {
return service.newAddData(vo);
}
@ApiOperation(value = "数据详情")
@PostMapping(value="newGetDetails")
public AjaxResult getNewDetails(@RequestBody SjProjectMassVo dto){
return service.getNewDetails(dto);
}
@ApiOperation(value = "新增工程质量分析数据")
@PostMapping("newUpdateData")
@Log(title = "数据分析", menu = "数据分析->工程质量分析", grade = OperationType.UPDATE_BUSINESS, details = "修改数据", type = "业务日志")
public AjaxResult newUpdateData(@RequestBody SjProjectMassVo vo) {
return service.newUpdateData(vo);
}
@ApiOperation(value = "数据详情")
@PostMapping(value="newDelete")
@Log(title = "数据分析", menu = "数据分析->工程质量分析", grade = OperationType.DELETE_BUSINESS, details = "删除数据", type = "业务日志")
public AjaxResult newDelete(@RequestBody SjProjectMassVo dto){
return service.newDelete(dto);
}
} }

View File

@ -1,6 +1,7 @@
package com.securitycontrol.background.mapper; package com.securitycontrol.background.mapper;
import com.securitycontrol.common.core.web.domain.AjaxResult; import com.securitycontrol.common.core.web.domain.AjaxResult;
import com.securitycontrol.entity.background.vo.SjProjectMassVo;
import com.securitycontrol.entity.background.vo.SjProjectQualityVo; import com.securitycontrol.entity.background.vo.SjProjectQualityVo;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@ -45,4 +46,39 @@ public interface SjProjectQualityMapper {
* @return * @return
*/ */
Integer delete(SjProjectQualityVo vo); Integer delete(SjProjectQualityVo vo);
/**
* 查询质量数据集合
* @param dto
* @return
*/
List<SjProjectMassVo> getNewList(SjProjectMassVo dto);
/**
* 新增数据
* @param vo
* @return
*/
Integer newAddData(SjProjectMassVo vo);
/**
* 获取详情
* @param dto
* @return
*/
SjProjectMassVo getNewDetails(SjProjectMassVo dto);
/**
* 修改数据
* @param vo
* @return
*/
Integer newUpdateData(SjProjectMassVo vo);
/**
* 删除
* @param dto
* @return
*/
Integer newDelete(SjProjectMassVo dto);
} }

View File

@ -3,6 +3,7 @@ package com.securitycontrol.background.service;
import com.securitycontrol.common.core.web.domain.AjaxResult; import com.securitycontrol.common.core.web.domain.AjaxResult;
import com.securitycontrol.entity.background.dto.ParamDto; import com.securitycontrol.entity.background.dto.ParamDto;
import com.securitycontrol.entity.background.vo.ProjectVo; import com.securitycontrol.entity.background.vo.ProjectVo;
import com.securitycontrol.entity.background.vo.SjProjectMassVo;
import com.securitycontrol.entity.background.vo.SjProjectQualityVo; import com.securitycontrol.entity.background.vo.SjProjectQualityVo;
import java.util.List; import java.util.List;
@ -42,4 +43,39 @@ public interface SjProjectQualityService {
* @return * @return
*/ */
AjaxResult delete(SjProjectQualityVo dto); AjaxResult delete(SjProjectQualityVo dto);
/**
* 获取质量分析列表
* @param dto
* @return
*/
List<SjProjectMassVo> getNewList(SjProjectMassVo dto);
/**
* 新增质量分析数据
* @param vo
* @return
*/
AjaxResult newAddData(SjProjectMassVo vo);
/**
* 获取质量分析详情
* @param dto
* @return
*/
AjaxResult getNewDetails(SjProjectMassVo dto);
/**
* 修改质量分析数据
* @param vo
* @return
*/
AjaxResult newUpdateData(SjProjectMassVo vo);
/**
* 删除质量分析数据
* @param dto
* @return
*/
AjaxResult newDelete(SjProjectMassVo dto);
} }

View File

@ -5,6 +5,7 @@ import com.securitycontrol.background.service.SjProjectQualityService;
import com.securitycontrol.common.core.web.domain.AjaxResult; import com.securitycontrol.common.core.web.domain.AjaxResult;
import com.securitycontrol.entity.background.dto.ParamDto; import com.securitycontrol.entity.background.dto.ParamDto;
import com.securitycontrol.entity.background.vo.ProjectVo; import com.securitycontrol.entity.background.vo.ProjectVo;
import com.securitycontrol.entity.background.vo.SjProjectMassVo;
import com.securitycontrol.entity.background.vo.SjProjectQualityVo; import com.securitycontrol.entity.background.vo.SjProjectQualityVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -89,4 +90,90 @@ public class SjProjectQualityServiceImpl implements SjProjectQualityService {
} }
return AjaxResult.error("删除失败,数据id不正确"); return AjaxResult.error("删除失败,数据id不正确");
} }
/**
* 获取质量分析列表
* @param dto
* @return
*/
@Override
public List<SjProjectMassVo> getNewList(SjProjectMassVo dto) {
try{
return mapper.getNewList(dto);
}catch (Exception e){
log.error(e.getMessage(),e);
}
return Collections.emptyList();
}
/**
* 新增质量分析数据
* @param vo
* @return
*/
@Override
public AjaxResult newAddData(SjProjectMassVo vo) {
try{
Integer num= mapper.newAddData(vo);
if(num!=null && num>0){
return AjaxResult.success("添加成功");
}
}catch (Exception e){
log.error(e.getMessage(),e);
}
return AjaxResult.error("新增失败,数据长度过长");
}
/**
* 获取质量分析详情
* @param dto
* @return
*/
@Override
public AjaxResult getNewDetails(SjProjectMassVo dto) {
try{
SjProjectMassVo data= mapper.getNewDetails(dto);
return AjaxResult.success(data);
}catch (Exception e){
log.error(e.getMessage(),e);
}
return AjaxResult.success(dto);
}
/**
* 修改质量分析数据
* @param vo
* @return
*/
@Override
public AjaxResult newUpdateData(SjProjectMassVo vo) {
try{
Integer num= mapper.newUpdateData(vo);
if(num!=null && num>0){
return AjaxResult.success("添加成功");
}
}catch (Exception e){
log.error(e.getMessage(),e);
}
return AjaxResult.error("修改失败,数据长度过长");
}
/**
* 删除质量分析数据
* @param dto
* @return
*/
@Override
public AjaxResult newDelete(SjProjectMassVo dto) {
try{
Integer num= mapper.newDelete(dto);
if(num>0){
return AjaxResult.success("删除成功");
}
}catch (Exception e){
log.error(e.getMessage(),e);
}
return AjaxResult.error("删除失败,数据id不正确");
}
} }

View File

@ -14,6 +14,21 @@
#{commOneAccept},#{commAcceptRate} #{commOneAccept},#{commAcceptRate}
) )
</insert> </insert>
<insert id="newAddData">
insert into sj_project_mass(
team_name,content_inspection,inspection_date,
inspection_results,inspection_url
)values (#{teamName},#{contentInspection},#{inspectionDate},#{inspectionResults},#{inspectionUrl})
</insert>
<insert id="newUpdateData">
update sj_project_mass set team_name=#{teamName},content_inspection=#{contentInspection},
inspection_date=#{inspectionDate},inspection_results=#{inspectionResults},
inspection_url=#{inspectionUrl}
where id=#{id}
</insert>
<delete id="newDelete">
delete from sj_project_mass where id=#{id}
</delete>
<!--修改质量数据--> <!--修改质量数据-->
<update id="updateData"> <update id="updateData">
update sj_project_quality set pro_type=#{proType},pro_structure=#{proStructure},total_item=#{totalItem}, update sj_project_quality set pro_type=#{proType},pro_structure=#{proStructure},total_item=#{totalItem},
@ -70,4 +85,32 @@
from sj_project_quality from sj_project_quality
where id=#{id} where id=#{id}
</select> </select>
<select id="getNewList" resultType="com.securitycontrol.entity.background.vo.SjProjectMassVo">
select id,
team_name teamName,
content_inspection contentInspection,
inspection_date inspectionDate,
inspection_results inspectionResults,
inspection_url inspectionUrl
from sj_project_mass
<where>
<if test="keyWord!=null and keyWord!=''">
(team_name like concat('%',#{keyWord},'%')
or content_inspection like concat('%',#{keyWord},'%')
or inspection_results like concat('%',#{keyWord},'%'))
</if>
<if test="startDate!=null and startDate!='' and endDate!=null and endDate!=''">
and DATE(inspection_date) BETWEEN #{startDate} and #{endDate}
</if>
</where>
</select>
<select id="getNewDetails" resultType="com.securitycontrol.entity.background.vo.SjProjectMassVo">
select id,
team_name teamName,
content_inspection contentInspection,
inspection_date inspectionDate,
inspection_results inspectionResults,
inspection_url inspectionUrl
from sj_project_mass where id=#{id}
</select>
</mapper> </mapper>

View File

@ -2,15 +2,22 @@ package com.securitycontrol.screen.controller;
import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.A; import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.A;
import com.securitycontrol.common.core.web.controller.BaseController; import com.securitycontrol.common.core.web.controller.BaseController;
import com.securitycontrol.common.core.web.domain.AjaxResult; import com.securitycontrol.common.core.web.domain.AjaxResult;
import com.securitycontrol.common.core.web.page.TableDataInfo;
import com.securitycontrol.common.log.annotation.Log;
import com.securitycontrol.common.log.enums.OperationType;
import com.securitycontrol.entity.background.vo.SjProjectMassVo;
import com.securitycontrol.screen.domain.SjProjectQuality; import com.securitycontrol.screen.domain.SjProjectQuality;
import com.securitycontrol.screen.service.SjProjectQualityService; import com.securitycontrol.screen.service.SjProjectQualityService;
import com.securitycontrol.screen.service.impl.SjProjectQualityServiceImpl; import com.securitycontrol.screen.service.impl.SjProjectQualityServiceImpl;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/** /**
* 工程质量数据分析控制层 * 工程质量数据分析控制层
@ -59,4 +66,62 @@ public class SjProjectQualityController extends BaseController {
} }
} }
/**
* 查询工程质量验收项-柱状图
*
* @param o 传参
* @return 查询工程质量验收项
*/
@GetMapping("selectProMassEcharts")
public AjaxResult selectProMassEcharts(SjProjectQuality o) {
try {
return service.selectProMassEcharts(o);
} catch (Exception e) {
log.error(e.toString(),e);
return error("请求出错了");
}
}
/**
* 查询工程质量验收项-饼图
*
* @param o 传参
* @return 查询工程质量验收项
*/
@GetMapping("selectProMassChart")
public AjaxResult selectProMassChart(SjProjectQuality o) {
try {
return service.selectProMassChart(o);
} catch (Exception e) {
log.error(e.toString(),e);
return error("请求出错了");
}
}
@ApiOperation(value = "查询工程质量分析列表数据")
@GetMapping("newList")
@Log(title = "数据分析", menu = "数据分析->工程质量分析", grade = OperationType.QUERY_BUSINESS, details = "查询工程质量分析数据", type = "业务日志")
public TableDataInfo getNewList(SjProjectMassVo dto) {
startPage();
List<SjProjectMassVo> list = new ArrayList<>();
list = service.getNewList(dto);
return getDataTable(list);
}
/**
* 查询工程质量验收项-预警
*
* @param o 传参
* @return 查询工程质量验收项
*/
@GetMapping("selectProMassWarning")
public AjaxResult selectProMassWarning(SjProjectQuality o) {
try {
return service.selectProMassWarning(o);
} catch (Exception e) {
log.error(e.toString(),e);
return error("请求出错了");
}
}
} }

View File

@ -1,9 +1,11 @@
package com.securitycontrol.screen.mapper; package com.securitycontrol.screen.mapper;
import com.securitycontrol.entity.background.vo.SjProjectMassVo;
import com.securitycontrol.screen.domain.SjProjectQuality; import com.securitycontrol.screen.domain.SjProjectQuality;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
import java.util.Map;
@Mapper @Mapper
public interface SjProjectQualityMapper { public interface SjProjectQualityMapper {
@ -11,4 +13,10 @@ public interface SjProjectQualityMapper {
SjProjectQuality selectProQualityData(SjProjectQuality o); SjProjectQuality selectProQualityData(SjProjectQuality o);
List<SjProjectQuality> selectProQualityEcharts(SjProjectQuality o); List<SjProjectQuality> selectProQualityEcharts(SjProjectQuality o);
List<Map<String,String>> selectProMassEcharts(SjProjectQuality o);
List<Map<String,String>> selectProMassChart(SjProjectQuality o);
List<SjProjectMassVo> getNewList(SjProjectMassVo dto);
} }

View File

@ -1,7 +1,11 @@
package com.securitycontrol.screen.service; package com.securitycontrol.screen.service;
import com.securitycontrol.common.core.web.domain.AjaxResult; import com.securitycontrol.common.core.web.domain.AjaxResult;
import com.securitycontrol.entity.background.vo.SjProjectMassVo;
import com.securitycontrol.screen.domain.SjProjectQuality; import com.securitycontrol.screen.domain.SjProjectQuality;
import java.util.List;
public interface SjProjectQualityService{ public interface SjProjectQualityService{
/** /**
@ -17,4 +21,23 @@ public interface SjProjectQualityService{
* @return * @return
*/ */
AjaxResult selectProQualityEcharts(SjProjectQuality o); AjaxResult selectProQualityEcharts(SjProjectQuality o);
AjaxResult selectProMassEcharts(SjProjectQuality o);
AjaxResult selectProMassChart(SjProjectQuality o);
/**
* 质量分析列表
* @param dto
* @return
*/
List<SjProjectMassVo> getNewList(SjProjectMassVo dto);
/**
* 查询工程质量验收项-预警
*
* @param o 传参
* @return 查询工程质量验收项
*/
AjaxResult selectProMassWarning(SjProjectQuality o);
} }

View File

@ -1,7 +1,9 @@
package com.securitycontrol.screen.service.impl; package com.securitycontrol.screen.service.impl;
import com.securitycontrol.common.core.web.domain.AjaxResult; import com.securitycontrol.common.core.web.domain.AjaxResult;
import com.securitycontrol.entity.background.vo.SjProjectMassVo;
import com.securitycontrol.screen.service.SjProjectQualityService; import com.securitycontrol.screen.service.SjProjectQualityService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -10,10 +12,13 @@ import com.securitycontrol.screen.domain.SjProjectQuality;
import com.securitycontrol.screen.mapper.SjProjectQualityMapper; import com.securitycontrol.screen.mapper.SjProjectQualityMapper;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j
@Service @Service
public class SjProjectQualityServiceImpl implements SjProjectQualityService { public class SjProjectQualityServiceImpl implements SjProjectQualityService {
@ -46,4 +51,50 @@ public class SjProjectQualityServiceImpl implements SjProjectQualityService {
return AjaxResult.success("查询成功",groupedByProType); return AjaxResult.success("查询成功",groupedByProType);
} }
@Override
public AjaxResult selectProMassEcharts(SjProjectQuality o) {
List<Map<String,String>> res = mapper.selectProMassEcharts(o);
return AjaxResult.success("查询成功",res);
}
@Override
public AjaxResult selectProMassChart(SjProjectQuality o) {
List<Map<String,String>> res =mapper.selectProMassChart(o);
return AjaxResult.success("查询成功",res);
}
/**
* 质量分析列表
* @param dto
* @return
*/
@Override
public List<SjProjectMassVo> getNewList(SjProjectMassVo dto) {
try{
return mapper.getNewList(dto);
}catch (Exception e){
log.error(e.getMessage(),e);
}
return Collections.emptyList();
}
/**
* 查询工程质量验收项-预警
*
* @param o 传参
* @return 查询工程质量验收项
*/
@Override
public AjaxResult selectProMassWarning(SjProjectQuality o) {
List<Map<String,String>> res = mapper.selectProMassEcharts(o);
List<Map<String,String>> resNew = new ArrayList<>();
for (Map<String,String> map : res) {
if (Integer.parseInt(map.get("ratePercentage"))<80){
resNew.add(map);
}
}
return AjaxResult.success("查询成功",resNew);
}
} }

View File

@ -58,4 +58,52 @@
pro_type, pro_type,
pro_structure pro_structure
</select> </select>
<select id="selectProMassEcharts" resultType="java.util.Map">
SELECT
team_name AS teamName,
COUNT(*) AS teamCount,
SUM(CASE WHEN inspection_results = '合格' THEN 1 ELSE 0 END) AS qualified,
SUM(CASE WHEN inspection_results = '不合格' THEN 1 ELSE 0 END) AS unqualified,
-- 计算合格率(百分比,保留两位小数)
ROUND(
SUM(CASE WHEN inspection_results = '合格' THEN 1 ELSE 0 END) * 100.0 /
COUNT(*),
2
) AS ratePercentage
FROM sj_project_mass
-- 只统计检测结果为"合格"或"不合格"的记录
WHERE inspection_results IN ('合格', '不合格')
GROUP BY team_name
ORDER BY ratePercentage DESC;
</select>
<select id="selectProMassChart" resultType="java.util.Map">
SELECT
inspection_results AS inspectionResults,
COUNT(*) AS num,
ROUND(COUNT(*) * 100.0 / (SELECT COUNT(*) FROM sj_project_mass), 2) AS ratePercentage
FROM sj_project_mass
GROUP BY inspection_results
ORDER BY COUNT(*) DESC;
</select>
<select id="getNewList" resultType="com.securitycontrol.entity.background.vo.SjProjectMassVo">
select id,
team_name teamName,
content_inspection contentInspection,
inspection_date inspectionDate,
inspection_results inspectionResults,
inspection_url inspectionUrl
from sj_project_mass
<where>
<if test="keyWord!=null and keyWord!=''">
(team_name like concat('%',#{keyWord},'%')
or content_inspection like concat('%',#{keyWord},'%')
or inspection_results like concat('%',#{keyWord},'%'))
</if>
<if test="startDate!=null and startDate!='' and endDate!=null and endDate!=''">
and DATE(inspection_date) BETWEEN #{startDate} and #{endDate}
</if>
</where>
</select>
</mapper> </mapper>