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

This commit is contained in:
马三炮 2025-10-18 17:01:27 +08:00
parent c1ddca32fc
commit 46ac46b659
6 changed files with 68 additions and 35 deletions

View File

@ -30,7 +30,7 @@ public class OverallEfficiencyAnalysisController extends BaseController {
* @param overallEfficiency 传参
* @return 查询整体效能分析
*/
@GetMapping("selectOverallEfficiencyData")
@GetMapping("/selectOverallEfficiencyData")
public AjaxResult selectOverallEfficiencyData(OverallEfficiency overallEfficiency) {
try {
return overallEfficiencyAnalysisService.selectOverallEfficiencyData(overallEfficiency);

View File

@ -30,7 +30,7 @@ public class ProjectDataController extends BaseController {
* @param projectData 传参
* @return 项目管理分析
*/
@GetMapping("selectProjectData")
@GetMapping("/selectProjectData")
public AjaxResult selectProjectData(ProjectData projectData) {
try {
return projectDataService.selectProjectData(projectData);

View File

@ -9,6 +9,7 @@ import com.securitycontrol.screen.mapper.OverallEfficiencyAnalysisMapper;
import com.securitycontrol.screen.service.OverallEfficiencyAnalysisService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
@ -37,32 +38,64 @@ public class OverallEfficiencyAnalysisServiceImpl implements OverallEfficiencyAn
res.put("天气",overallEfficiencyList);
//获取施工天数
OverallEfficiency overallEfficiencyNew = overallEfficiencyAnalysisMapper.getPlanDay(overallEfficiency);
res.put("计划施工天数",overallEfficiencyNew.getPlanDay());
res.put("有效施工天数",overallEfficiencyNew.getEffectiveDay());
if (StringUtils.isEmpty(overallEfficiencyNew)){
res.put("计划施工天数",0);
res.put("有效施工天数",0);
}else {
res.put("计划施工天数",overallEfficiencyNew.getPlanDay());
res.put("有效施工天数",overallEfficiencyNew.getEffectiveDay());
}
//质量分析
SjProjectQualityVo sjProjectQuality = overallEfficiencyAnalysisMapper.getSjProjectQuality();
res.put("总验收项",sjProjectQuality.getTotalItem());
res.put("已验收项",sjProjectQuality.getAcceptItem());
res.put("验收率",sjProjectQuality.getAcceptRate());
res.put("主设备试验调试一次通过率",sjProjectQuality.getMainAcceptRate());
if (StringUtils.isEmpty(overallEfficiencyNew)){
res.put("总验收项",0);
res.put("已验收项",0);
res.put("验收率",0);
res.put("主设备试验调试一次通过率",0);
}else {
res.put("总验收项",sjProjectQuality.getTotalItem());
res.put("已验收项",sjProjectQuality.getAcceptItem());
res.put("验收率",sjProjectQuality.getAcceptRate());
res.put("主设备试验调试一次通过率",sjProjectQuality.getMainAcceptRate());
}
//安全预警
List<SjProjectSafety> sjProjectSafetyList = overallEfficiencyAnalysisMapper.getSjProjectSafety(overallEfficiency);
res.put("安全预警",sjProjectSafetyList);
//进度分析
OverallEfficiency overallEfficiencyProgress = overallEfficiencyAnalysisMapper.getProgress(overallEfficiency);
res.put("当前进度",overallEfficiencyProgress.getCurrentProgress()+"%");
res.put("计划进度",overallEfficiencyProgress.getPlanProgress()+"%");
res.put("进度偏差",overallEfficiencyProgress.getDeviationPercent()+"%");
if (StringUtils.isEmpty(overallEfficiencyProgress)){
res.put("当前进度",0);
res.put("计划进度",0);
res.put("进度偏差",0);
}else {
res.put("当前进度",overallEfficiencyProgress.getCurrentProgress()+"%");
res.put("计划进度",overallEfficiencyProgress.getPlanProgress()+"%");
res.put("进度偏差",overallEfficiencyProgress.getDeviationPercent()+"%");
}
//成本分析 1--计划 2--实际
overallEfficiency.setDataType("1");
OverallEfficiency overallEfficiencyCost = overallEfficiencyAnalysisMapper.getCost(overallEfficiency);
overallEfficiency.setDataType("2");
OverallEfficiency overallEfficiencyCost2 = overallEfficiencyAnalysisMapper.getCost(overallEfficiency);
res.put("计划成本",overallEfficiencyCost.getDataMoney());
res.put("实际成本",overallEfficiencyCost2.getDataMoney());
BigDecimal difference = overallEfficiencyCost2.getDataMoney().subtract(overallEfficiencyCost.getDataMoney()); // B - A
BigDecimal ratio = difference.divide(overallEfficiencyCost.getDataMoney(), 2, RoundingMode.HALF_UP); // 除法保留scale位小数四舍五入
res.put("缩减成本",ratio+"%");
if(StringUtils.isEmpty(overallEfficiencyCost)){
res.put("计划成本",BigDecimal.ZERO);
}else {
res.put("计划成本",overallEfficiencyCost.getDataMoney());
}
if(StringUtils.isEmpty(overallEfficiencyCost2)){
res.put("实际成本",BigDecimal.ZERO);
}else {
res.put("实际成本",overallEfficiencyCost2.getDataMoney());
}
if(StringUtils.isEmpty(overallEfficiencyCost) || StringUtils.isEmpty(overallEfficiencyCost2)){
res.put("实际成本",BigDecimal.ZERO);
}else {
BigDecimal difference = overallEfficiencyCost2.getDataMoney().subtract(overallEfficiencyCost.getDataMoney()); // B - A
BigDecimal ratio = difference.divide(overallEfficiencyCost.getDataMoney(), 2, RoundingMode.HALF_UP); // 除法保留scale位小数四舍五入
res.put("缩减成本",ratio+"%");
}
return AjaxResult.success(res);
}
}

View File

@ -11,6 +11,7 @@ import com.securitycontrol.screen.mapper.SjConstructionProgressMapper;
import com.securitycontrol.screen.service.ProjectDataService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
@ -45,26 +46,25 @@ public class ProjectDataServiceImpl implements ProjectDataService {
overallEfficiency.setEndTime(projectData.getEndTime());
//进度分析
OverallEfficiency overallEfficiencyProgress = overallEfficiencyAnalysisMapper.getProgress(overallEfficiency);
res.put("当前工程进度",overallEfficiencyProgress.getCurrentProgress()+"%");
if (StringUtils.isEmpty(overallEfficiencyProgress)){
res.put("当前工程进度",0);
}else {
res.put("当前工程进度",overallEfficiencyProgress.getCurrentProgress()+"%");
}
//成本分析 1--计划 2--实际
overallEfficiency.setDataType("1");
OverallEfficiency overallEfficiencyCost = overallEfficiencyAnalysisMapper.getCost(overallEfficiency);
overallEfficiency.setDataType("2");
OverallEfficiency overallEfficiencyCost2 = overallEfficiencyAnalysisMapper.getCost(overallEfficiency);
BigDecimal ratio = overallEfficiencyCost2.getDataMoney().divide(overallEfficiencyCost.getDataMoney(), 2, RoundingMode.HALF_UP); // 除法保留scale位小数四舍五入
res.put("当前成本投入",ratio+"%");
if (StringUtils.isEmpty(overallEfficiencyCost) || StringUtils.isEmpty(overallEfficiencyCost2) ){
res.put("当前成本投入",0);
}else {
BigDecimal ratio = overallEfficiencyCost2.getDataMoney().divide(overallEfficiencyCost.getDataMoney(), 2, RoundingMode.HALF_UP); // 除法保留scale位小数四舍五入
res.put("当前成本投入",ratio+"%");
}
//折线图
SjConstructionProgress o = new SjConstructionProgress();
String sql = "SELECT DATE_ADD("+projectData.getStartTime()+", INTERVAL (ones.a + tens.a * 10) DAY) AS dt\n" +
" FROM\n" +
" (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3\n" +
" UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7\n" +
" UNION ALL SELECT 8 UNION ALL SELECT 9) AS ones\n" +
" CROSS JOIN\n" +
" (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3\n" +
" UNION ALL SELECT 4 UNION ALL SELECT 5) AS tens\n" +
" WHERE DATE_ADD("+projectData.getStartTime()+", INTERVAL (ones.a + tens.a * 10) DAY) <= "+projectData.getEndTime();
o.setSql(sql);
o.setEndTime(projectData.getEndTime());
o.setStartTime(projectData.getStartTime());
List<SjConstructionProgress> echartsList = sjConstructionProgressMapper.selectProProgress(o);
@ -72,7 +72,7 @@ public class ProjectDataServiceImpl implements ProjectDataService {
.collect(Collectors.groupingBy(SjConstructionProgress::getProType));
res.put("项目情况详情",groupedByProTypeEcharts);
//今日风险
Integer countNum=0 ;
int countNum=0 ;
projectData.setDateTime(DateUtils.getDate());
List<ProjectData> projectSafetyDataList = projectDataMapper.getTodaySafety(projectData);
for (ProjectData projectDataNew:projectSafetyDataList) {
@ -98,10 +98,10 @@ public class ProjectDataServiceImpl implements ProjectDataService {
projectDataCountNum.setNum(countNum);
projectSafetyDataList2.add(projectDataCountNum);
res.put("项目风险",projectSafetyDataList2);
Integer xhCount = projectDataMapper.getXhSafety(projectData);
int xhCount = projectDataMapper.getXhSafety(projectData);
res.put("已销号风险",xhCount);
res.put("剩余风险",countNum-xhCount);
Integer twoCount = projectDataMapper.getTwoSafety(projectData);
int twoCount = projectDataMapper.getTwoSafety(projectData);
res.put("剩余二级及以上风险",twoCount);
return AjaxResult.success(res);
}

View File

@ -12,7 +12,7 @@
SELECT
SUM(
DATEDIFF(LEAST(plan_end_time, #{endTime}), GREATEST(plan_start_time, #{startTime})) + 1
) AS total_plan_days,
) AS planDay,
SUM(
CASE
WHEN start_time IS NOT NULL AND end_time IS NOT NULL THEN
@ -25,7 +25,7 @@
)
ELSE 0
END
) AS total_actual_days
) AS effectiveDay
FROM
sj_construction_progress
WHERE

View File

@ -4,7 +4,7 @@
<select id="getCost" resultType="com.securitycontrol.screen.domain.ProjectData">
select date_time,data_money
select date_time as dateTime,data_money as dataMoney
from sj_project_manage where data_type= #{dataType}
and date_time between #{startTime} and #{endTime}
</select>