|
@@ -1,7 +1,7 @@
|
|
|
package com.ozs.pm.service.impl;
|
|
|
|
|
|
+import java.text.DecimalFormat;
|
|
|
import java.text.ParseException;
|
|
|
-import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
@@ -1421,6 +1421,173 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
|
|
|
return resVos;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public AjaxResult countProjectExceed() {
|
|
|
+ HashMap<String, String> resMap = new HashMap<>();
|
|
|
+ //执行滞后采购项目:本年度所有的逾期项目数
|
|
|
+ //预算金额:本年度所有逾期项目累加的预算金额
|
|
|
+ StatisticalChartsResVo resVo = pmDemandMapper.countProjectExceed();
|
|
|
+ resMap.put("执行滞后采购项目", resVo.getNum());
|
|
|
+ resMap.put("预算金额", resVo.getEvaluationTotal());
|
|
|
+ //滞后项目数量占比:指本年度逾期项目数量/本年度所有项目数量
|
|
|
+ Integer thisYear = pmDemandMapper.countThisYear();
|
|
|
+ resMap.put("滞后项目数量占比", getPercent(Integer.parseInt(resVo.getNum()), thisYear));
|
|
|
+ return AjaxResult.success(resMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 统计不同时间维度的逾期项目
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public AjaxResult exceedAnalysis() {
|
|
|
+ HashMap<String, List<StatisticalChartsResVo>> resMap = new HashMap<>();
|
|
|
+ List<StatisticalChartsResVo> byYear = pmDemandMapper.countProjectExceedYear();
|
|
|
+ List<StatisticalChartsResVo> byMonth = pmDemandMapper.countProjectExceedMonth();
|
|
|
+ List<StatisticalChartsResVo> byQuarter = new LinkedList<>();
|
|
|
+ for (StatisticalChartsResVo chartsResVo : byYear) {
|
|
|
+ for (int i = 1; i <= 4; i++) {
|
|
|
+ StatisticalChartsResVo quarter = pmDemandMapper.countProjectExceedQuarter(i, Integer.parseInt(chartsResVo.getColumnName()));
|
|
|
+ if (Integer.parseInt(quarter.getNum()) > 0) {
|
|
|
+ quarter.setColumnName(chartsResVo.getColumnName() + "年第" + i + "季度");
|
|
|
+ byQuarter.add(quarter);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ resMap.put("年", byYear);
|
|
|
+ resMap.put("月", byMonth);
|
|
|
+ resMap.put("季度", byQuarter);
|
|
|
+ return AjaxResult.success(resMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AjaxResult taskQuantityAnalysis() {
|
|
|
+ //任务数量趋势分析:按照月、季度、年统计“项目属性”字段中“重大规划”属性的项目
|
|
|
+ //统计数据包括:上年度已完成任务数、本年度已完成任务数、新受领任务数(指未完成的数量)
|
|
|
+ HashMap<String, List<StatisticalChartsResVo>> resMap = new HashMap<>();
|
|
|
+ List<StatisticalChartsResVo> thisYearFinish = pmDemandMapper.taskQuantityYear(PmProjectStatus.COMPLETION_CONSTRUCTION.getCode());
|
|
|
+ List<StatisticalChartsResVo> lastYearFinish = pmDemandMapper.taskQuantityLastYear(PmProjectStatus.COMPLETION_CONSTRUCTION.getCode());
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AjaxResult newFinishPro() {
|
|
|
+ // 新完成采购任务数量:本年度状态为“合同待填制”、“项目建设中”、“项目建设完成”的项目
|
|
|
+ // 预算金额:“合同待填制”、“项目建设中”、“项目建设完成”的项目累加的预算金额
|
|
|
+ //合同金额:“合同待填制”、“项目建设中”、“项目建设完成”的项目累加的合同金额
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AjaxResult countEveryStatusNum() {
|
|
|
+ //指项目进行到各个阶段的数量
|
|
|
+ //阶段包括:待选取代理、待上传招标文件、待发布公告、待开标、待发布中标公告、中标公式中
|
|
|
+ List<StatisticalChartsResVo> everyStatusNum = pmDemandMapper.countEveryStatusNum();
|
|
|
+ if (!ObjectUtils.isEmpty(everyStatusNum) && everyStatusNum.size() > 0) {
|
|
|
+ for (StatisticalChartsResVo vo : everyStatusNum) {
|
|
|
+ switch (vo.getColumnName()) {
|
|
|
+ case "9":
|
|
|
+ vo.setColumnName(PmProjectStatus.WAIT_SELECT_AGENT.getInfo());
|
|
|
+ case "10":
|
|
|
+ vo.setColumnName(PmProjectStatus.WAIT_UPLOAD_BID_FILE.getInfo());
|
|
|
+ case "11":
|
|
|
+ vo.setColumnName(PmProjectStatus.WAIT_ANNOUNCEMENT.getInfo());
|
|
|
+ case "12":
|
|
|
+ vo.setColumnName(PmProjectStatus.WAIT_OPEN_BID.getInfo());
|
|
|
+ case "13":
|
|
|
+ vo.setColumnName(PmProjectStatus.WAIT_BID_ANNOUNCEMENT.getInfo());
|
|
|
+ case "14":
|
|
|
+ vo.setColumnName(PmProjectStatus.BIDDING_PUBLICITY.getInfo());
|
|
|
+ }
|
|
|
+ //展示信息包括:鼠标上到图表时,展示项目数量和平均消耗时长(平均消耗时长,指所有项目在该阶段完成的平均时间)
|
|
|
+ //Integer days= pmDemandMapper.getTimeByStatus(PmProjectStatus.WAIT_SELECT_AGENT.getCode());
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // WAIT_SELECT_AGENT("9", "待选取代理"),
|
|
|
+ // WAIT_UPLOAD_BID_FILE("10", "待上传招标文件"),
|
|
|
+ // WAIT_ANNOUNCEMENT("11", "待发布公告"),
|
|
|
+ // WAIT_OPEN_BID("12", "待开标"),
|
|
|
+ // WAIT_BID_ANNOUNCEMENT("13", "待发布中标公告"),
|
|
|
+ // BIDDING_PUBLICITY("14", "中标公示中"),
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AjaxResult exceedMarketAnalysis() {
|
|
|
+ //所有滞后
|
|
|
+ List<PmDemand> demandList = pmDemandMapper.countProjectExceedAll();
|
|
|
+ //滞后时长包括:滞后1个月以内的采购任务、滞后1至3个月采购任务、滞后3至6个月采购任务、滞后6个月至1年采购任务、滞后1年以上采购任务
|
|
|
+ HashMap<String, Integer> map = new LinkedHashMap<>();
|
|
|
+ map.put("滞后1个月以内的采购任务", 0);
|
|
|
+ map.put("滞后1至3个月采购任务", 0);
|
|
|
+ map.put("滞后3至6个月采购任务", 0);
|
|
|
+ map.put("滞后6个月至1年采购任务", 0);
|
|
|
+ map.put("滞后1年以上采购任务", 0);
|
|
|
+ if (!ObjectUtils.isEmpty(demandList) && demandList.size() > 0) {
|
|
|
+ for (PmDemand demand : demandList) {
|
|
|
+ //滞后时间
|
|
|
+ Long exTime = null;
|
|
|
+ if (!ObjectUtils.isEmpty(demand.getRealDemandCommitTime()) && demand.getRealDemandCommitTime().getTime() - demand.getPlanDemandSubTime().getTime() > 0) {
|
|
|
+ exTime = demand.getRealDemandCommitTime().getTime() - demand.getPlanDemandSubTime().getTime();
|
|
|
+ } else if (!ObjectUtils.isEmpty(demand.getRealPurchaseFinishTime()) && demand.getRealPurchaseFinishTime().getTime() - demand.getPlanPurchaseFinishTime().getTime() > 0) {
|
|
|
+ exTime = demand.getRealPurchaseFinishTime().getTime() - demand.getPlanPurchaseFinishTime().getTime();
|
|
|
+ } else if (!ObjectUtils.isEmpty(demand.getRealDeliverTime()) && demand.getRealDeliverTime().getTime() - demand.getPlanDeliverTime().getTime() > 0) {
|
|
|
+ exTime = demand.getRealDeliverTime().getTime() - demand.getPlanDeliverTime().getTime();
|
|
|
+ }
|
|
|
+ if (exTime < Long.valueOf("2592000000")) {
|
|
|
+ map.put("滞后1个月以内的采购任务", map.get("滞后1个月以内的采购任务") + 1);
|
|
|
+ }
|
|
|
+ if (exTime >= Long.valueOf("2592000000") && exTime < Long.valueOf("7776000000")) {
|
|
|
+ map.put("滞后1至3个月采购任务", map.get("滞后1至3个月采购任务") + 1);
|
|
|
+ }
|
|
|
+ if (exTime >= Long.valueOf("7776000000") && exTime < Long.valueOf("15552000000")) {
|
|
|
+ map.put("滞后3至6个月采购任务", map.get("滞后3至6个月采购任务") + 1);
|
|
|
+ }
|
|
|
+ if (exTime >= Long.valueOf("15552000000") && exTime < Long.valueOf("31104000000")) {
|
|
|
+ map.put("滞后6个月至1年采购任务", map.get("滞后6个月至1年采购任务") + 1);
|
|
|
+ }
|
|
|
+ if (exTime > Long.valueOf("31104000000")) {
|
|
|
+ map.put("滞后1年以上采购任务", map.get("滞后1年以上采购任务") + 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return AjaxResult.success(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AjaxResult countMajorProject() {
|
|
|
+ List<StatisticalChartsResVo> resVos = new ArrayList<>();
|
|
|
+ //数量:指本年度状态为“项目建设完成”的项目属性为“重大规划”的项目数
|
|
|
+ //预算金额:指本年度状态为“项目建设完成”的项目属性为“重大规划”的项目累加的预算金额
|
|
|
+ StatisticalChartsResVo resVo = new StatisticalChartsResVo();
|
|
|
+ resVo = pmDemandMapper.majorProjectByStatus(PmProjectStatus.COMPLETION_CONSTRUCTION.getCode());
|
|
|
+ resVo.setColumnName("项目建设完成");
|
|
|
+ resVos.add(resVo);
|
|
|
+ //正常推进项目:指本年度正在进行中的项目属性为“重大规划”的项目数
|
|
|
+ //预算金额:指本年度正在进行中的项目属性为“重大规划”的项目累加的预算金额
|
|
|
+ StatisticalChartsResVo resVo1 = new StatisticalChartsResVo();
|
|
|
+ resVo1 = pmDemandMapper.majorProjectByStatus(PmProjectStatus.UNDER_CONSTRUCTION.getCode());
|
|
|
+ resVo1.setColumnName("正常推进项目");
|
|
|
+ resVos.add(resVo1);
|
|
|
+
|
|
|
+ //执行滞后数量:指本年度逾期项目中,项目属性为“重大规划”的项目数
|
|
|
+ //预算金额:指本年度正在进行中的项目属性为“重大规划”的项目累加的预算金额
|
|
|
+ StatisticalChartsResVo resVo2 = new StatisticalChartsResVo();
|
|
|
+ resVo2 = pmDemandMapper.countProjectExceedAndMajor();
|
|
|
+ resVo2.setColumnName("执行滞后数量");
|
|
|
+ resVos.add(resVo2);
|
|
|
+
|
|
|
+ //resVo2=pmDemandMapper.majorProjectByStatus(PmProjectStatus.COMPLETION_CONSTRUCTION.getCode());
|
|
|
+ return AjaxResult.success(resVos);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
//查询不同状态下的项目数据
|
|
|
public List<PmDemandResVo> getListByStatus(String projectStatus) {
|
|
@@ -1536,4 +1703,19 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
|
|
|
}
|
|
|
return "";
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 计算百分比:使用java.text.DecimalFormat实现
|
|
|
+ *
|
|
|
+ * @param x
|
|
|
+ * @param y
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getPercent(int x, int y) {
|
|
|
+ double d1 = x * 1.0;
|
|
|
+ double d2 = y * 1.0;
|
|
|
+ // 设置保留几位小数, “.”后面几个零就保留几位小数,这里设置保留2位小数
|
|
|
+ DecimalFormat decimalFormat = new DecimalFormat("##.00%");
|
|
|
+ return decimalFormat.format(d1 / d2);
|
|
|
+ }
|
|
|
}
|