Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/master'

suntianwu 2 anni fa
parent
commit
0acd138fee

+ 129 - 0
purchase-admin/src/main/java/com/ozs/web/controller/statisticalAnalysis/AnalysisController.java

@@ -0,0 +1,129 @@
+package com.ozs.web.controller.statisticalAnalysis;
+
+import com.ozs.common.annotation.Log;
+import com.ozs.common.constant.ModularConstans;
+import com.ozs.common.core.controller.BaseController;
+import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.common.enums.BusinessType;
+import com.ozs.common.utils.StringUtils;
+import com.ozs.pm.doman.vo.requestVo.PmDemandReqVo;
+import com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo;
+import com.ozs.pm.service.IPmDemandService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 统计分析页面控制层
+ * (需求更新后进行的整理)
+ *
+ * @author buzhanyi
+ */
+@RestController
+@RequestMapping("/analysis")
+public class AnalysisController extends BaseController {
+
+    @Resource
+    private IPmDemandService pmDemandService;
+
+    @ApiOperation(value = "需求提报情况")
+    @PostMapping("/demandSubCount")
+    @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
+    public AjaxResult demandSubCount(@RequestBody PmDemandReqVo pmDemandReqVo) {
+        if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
+            return error("登录账号的单位 不能为空!");
+        }
+        List<StatisticalChartsResVo> resVos = pmDemandService.demandSubCount(pmDemandReqVo);
+        return success(resVos);
+    }
+
+    @ApiOperation(value = "项目类型情况统计")
+    @PostMapping("/countByProjectType")
+    //@PreAuthorize("@ss.hasPermi('statistical:countByProjectType')")
+    @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
+    public AjaxResult countByProjectType(@RequestBody PmDemandReqVo pmDemandReqVo) {
+        if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
+            return error("登录账号的单位 不能为空!");
+        }
+        List<StatisticalChartsResVo> resVos = pmDemandService.countByProjectType(pmDemandReqVo);
+        return AjaxResult.success(resVos);
+    }
+
+    @ApiOperation(value = "项目属性情况统计")
+    @PostMapping("/countByProjectAttr")
+    //@PreAuthorize("@ss.hasPermi('statistical:countByProjectAttr')")
+    @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
+    public AjaxResult countByProjectAttr(@RequestBody PmDemandReqVo pmDemandReqVo) {
+        //按照项目属性统计所有的项目
+        if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
+            return error("登录账号的单位 不能为空!");
+        }
+        List<StatisticalChartsResVo> resVos = pmDemandService.countByProjectAttr(pmDemandReqVo);
+        return AjaxResult.success(resVos);
+    }
+
+    @ApiOperation(value = "需采转化情况统计")
+    @PostMapping("/countByPurchaseChange")
+    //@PreAuthorize("@ss.hasPermi('statistical:countByPurchaseChange')")
+    @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
+    public AjaxResult countByPurchaseChange(@RequestBody PmDemandReqVo pmDemandReqVo) {
+        if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
+            return error("登录账号的单位 不能为空!");
+        }
+        List<StatisticalChartsResVo> resVos = pmDemandService.countByPurchaseChange(pmDemandReqVo);
+        return AjaxResult.success(resVos);
+    }
+
+    @ApiOperation(value = "执行滞后分析")
+    @PostMapping("/countProjectExceed")
+    //@PreAuthorize("@ss.hasPermi('statistical:countProjectExceed')")
+    @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
+    public AjaxResult countProjectExceed(@RequestBody PmDemandReqVo pmDemandReqVo) {
+        if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
+            return error("登录账号的单位 不能为空!");
+        }
+        return pmDemandService.countProjectExceed(pmDemandReqVo);
+    }
+
+    @ApiOperation(value = "滞后项目时长分析")
+    @PostMapping("/exceedMarketAnalysis")
+    //@PreAuthorize("@ss.hasPermi('statistical:exceedMarketAnalysis')")
+    @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
+    public AjaxResult exceedMarketAnalysis(@RequestBody PmDemandReqVo pmDemandReqVo) {
+        //按照滞后时长统计项目数量
+        //滞后时长包括:滞后1个月以内的采购任务、滞后1至3个月采购任务、滞后3至6个月采购任务、滞后6个月至1年采购任务、滞后1年以上采购任务
+        if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
+            return error("登录账号的单位 不能为空!");
+        }
+        return pmDemandService.exceedMarketAnalysis(pmDemandReqVo);
+    }
+
+    @ApiOperation(value = "滞后主要直接原因")
+    @PostMapping("/exceedReason")
+    //@PreAuthorize("@ss.hasPermi('statistical:exceedReason')")
+    @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
+    public AjaxResult exceedReason(@RequestBody PmDemandReqVo pmDemandReqVo) {
+        //按照滞后时长统计项目数量
+        //滞后时长包括:滞后1个月以内的采购任务、滞后1至3个月采购任务、滞后3至6个月采购任务、滞后6个月至1年采购任务、滞后1年以上采购任务
+        if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
+            return error("登录账号的单位 不能为空!");
+        }
+        return pmDemandService.exceedReason(pmDemandReqVo);
+    }
+
+    @ApiOperation(value = "重大规划采购任务专项计划管理情况")
+    @PostMapping("/countMajorProject")
+    //@PreAuthorize("@ss.hasPermi('statistical:countMajorProject')")
+    @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)
+    public AjaxResult countMajorProject(@RequestBody PmDemandReqVo pmDemandReqVo) {
+        if (StringUtils.isNull(pmDemandReqVo.getPurchaseDeptId())) {
+            return error("登录账号的单位 不能为空!");
+        }
+        return pmDemandService.countMajorProject(pmDemandReqVo);
+    }
+}

+ 1 - 1
purchase-admin/src/main/java/com/ozs/web/controller/statisticalAnalysis/StatisticalAnalysisController.java

@@ -106,7 +106,7 @@ public class StatisticalAnalysisController extends BaseController {
         return AjaxResult.success(resVos);
     }
 
-    @ApiOperation(value = "执行滞后采购项目情况")
+    @ApiOperation(value = "执行滞后分析")
     @PostMapping("/countProjectExceed")
     //@PreAuthorize("@ss.hasPermi('statistical:countProjectExceed')")
     @Log(title = ModularConstans.statisticalAnalysis, businessType = BusinessType.QUERY)

+ 6 - 0
purchase-system/src/main/java/com/ozs/plan/doman/PlanQuarter.java

@@ -141,6 +141,12 @@ public class PlanQuarter {
      * 请求根据字段 appDelete 判断,值是true就是已申请
      */
     private String appDelete;
+    /**
+     * 是否可以申请撤销
+     * 请求根据字段 appDeleteDo 判断,值是true就是可以申请
+     */
+    @TableField(exist = false)
+    private String appDeleteDo;
     /**
      * 发函状态(0:未发函或已处理,1:确认发函)
      */

+ 6 - 0
purchase-system/src/main/java/com/ozs/plan/doman/PlanYears.java

@@ -134,6 +134,12 @@ public class PlanYears {
      * 请求根据字段 appDelete 判断,值是true就是已申请
      */
     private String appDelete;
+    /**
+     * 是否可以申请撤销
+     * 请求根据字段 appDeleteDo 判断,值是true就是可以申请
+     */
+    @TableField(exist = false)
+    private String appDeleteDo;
     /**
      * 发函状态(0:未发函或已处理,1:确认发函)
      */

+ 5 - 0
purchase-system/src/main/java/com/ozs/plan/doman/vo/responseVo/PlanQuarterResponseVo.java

@@ -98,6 +98,11 @@ public class PlanQuarterResponseVo implements Serializable {
      * 请求根据字段 appDelete 判断,值是true就是已申请
      */
     private String appDelete;
+    /**
+     * 是否可以申请撤销
+     * 请求根据字段 appDeleteDo 判断,值是true就是可以申请
+     */
+    private String appDeleteDo;
     /**
      * 计划调整情况及理由--->如计划需要变更,在填写申请修改时需填写调整情况及理由,审核单位审核通过后显示
      */

+ 10 - 5
purchase-system/src/main/java/com/ozs/plan/doman/vo/responseVo/PlanYearsResponseVo.java

@@ -93,6 +93,16 @@ public class PlanYearsResponseVo implements Serializable {
     private String projectAttr;
     @Excel(name = "项目属性")
     private String projectAttrStr;
+    /**
+     * 处理申请撤销
+     * 请求根据字段 appDelete 判断,值是true就是已申请
+     */
+    private String appDelete;
+    /**
+     * 是否可以申请撤销
+     * 请求根据字段 appDeleteDo 判断,值是true就是可以申请
+     */
+    private String appDeleteDo;
     /**
      * 退回原因--->审核不通过就是退回
      */
@@ -117,11 +127,6 @@ public class PlanYearsResponseVo implements Serializable {
     private String projectStatus;
     @Excel(name = "项目状态")
     private String projectStatusStr;
-    /**
-     * 处理申请撤销
-     * 请求根据字段 appDelete 判断,值是true就是已申请
-     */
-    private String appDelete;
     /**
      * 发函状态(0:未发函或已处理,1:确认发函)
      */

+ 16 - 1
purchase-system/src/main/java/com/ozs/plan/service/impl/PlanYearsServiceImpl.java

@@ -964,7 +964,7 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
                     detailType = "6";
                 }
             }
-            PmDemandResVo vo = demandService.selectPmDemandByDemandId(pmDemand.getDemandId(),detailType);
+            PmDemandResVo vo = demandService.selectPmDemandByDemandId(pmDemand.getDemandId(), detailType);
             return AjaxResult.success(vo);
         } else {
             if (StringUtils.isNotNull(provisionalPlan)) {
@@ -1221,6 +1221,21 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
                     }
                 }
             }
+            //是否可以申请撤销
+            //需求待填制可以申请,需求建档就不能申请
+            PlanQuarter byPlanYearId = planQuarterMapper.getByPlanYearId(planYear.getPlanYearId());
+            if (!ObjectUtils.isEmpty(byPlanYearId)) {
+                PmDemand demand = demandService.selectByPlanId(byPlanYearId.getPlanPracticalId());
+                if (!ObjectUtils.isEmpty(demand) && !demand.getProjectStatus().equals(PmProjectStatus.DEMAND_WAIT_FILL.getCode())) {
+                    planYear.setAppDeleteDo("false");
+                } else if (planYear.getAppDelete().equals("true")) {
+                    //申请过的不能再申请
+                    planYear.setAppDeleteDo("false");
+                } else {
+                    planYear.setAppDeleteDo("true");
+                }
+            }
+
             BeanUtils.copyProperties(planYear, responseVo);
             try {
                 responseVo.setTipsMessage(planYearsGetTips(responseVo, thresholdMap, alertTimeMap));

+ 7 - 1
purchase-system/src/main/java/com/ozs/pm/doman/vo/requestVo/PmDemandReqVo.java

@@ -132,9 +132,15 @@ public class PmDemandReqVo extends PageVo {
 
     private Long userId;
     private Boolean isAdmin;
-    //查询全部or指定部门
+    /**
+     * 查询全部or指定部门
+     */
     private List<Integer> deptList;
 
     @ApiModelProperty("回退序号")
     private Integer returnOrderNumber;
+    /**
+     * 要查询的需求id集合
+     */
+    List<Long> demandIdAll;
 }

+ 6 - 0
purchase-system/src/main/java/com/ozs/pm/mapper/PmCallQuestionHisMapper.java

@@ -3,6 +3,8 @@ package com.ozs.pm.mapper;
 import com.ozs.pm.doman.PmCallQuestionHis;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+import java.util.List;
+
 
 /**
  * 质疑表历史表(PmCallQuestionHis)表数据库访问层
@@ -12,4 +14,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface PmCallQuestionHisMapper extends BaseMapper<PmCallQuestionHis> {
 
+    /**
+     * 取出所有的需求id
+     */
+    List<Long> selectDemandIdAll();
 }

+ 113 - 5
purchase-system/src/main/java/com/ozs/pm/mapper/PmDemandMapper.java

@@ -99,7 +99,35 @@ public interface PmDemandMapper extends BaseMapper<PmDemand> {
      *
      * @return
      */
-    StatisticalChartsResVo countProjectExceed(@Param("vo") PmDemandReqVo pmDemandReqVo);
+    StatisticalChartsResVo countProjectExceedThisYear(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 本季度所有的逾期项目数
+     *
+     * @return
+     */
+    StatisticalChartsResVo countProjectExceedThisQua(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 本月份所有的逾期项目数
+     *
+     * @return
+     */
+    StatisticalChartsResVo countProjectExceedThisMonth(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 累计积压的执行滞后采购任务数
+     *
+     * @return
+     */
+    StatisticalChartsResVo countProjectExceedAllNum(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 执行停滞采购任务数量--退回的采购任务数量
+     *
+     * @return
+     */
+    StatisticalChartsResVo countProjectExceedTZ(@Param("vo") PmDemandReqVo pmDemandReqVo);
 
     /**
      * 年度逾期项目数量
@@ -137,13 +165,84 @@ public interface PmDemandMapper extends BaseMapper<PmDemand> {
     List<PmDemand> countProjectExceedAll(@Param("vo") PmDemandReqVo pmDemandReqVo);
 
     /**
-     * //***状态:指本年度正在进行中的项目属性为“重大规划”的项目数
-     * //预算金额:指本年度正在进行中的项目属性为“重大规划”的项目累加的预算金额
+     * 本月度新提报重大规划采购任务数量
+     *
+     * @param
+     * @return
+     */
+    StatisticalChartsResVo majorProjectByStatusThisMonthNew(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 本季度新提报重大规划采购任务数量
+     *
+     * @param
+     * @return
+     */
+    StatisticalChartsResVo majorProjectByStatusThisQuaNew(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 本年度新提报重大规划采购任务数量
+     *
+     * @param
+     * @return
+     */
+    StatisticalChartsResVo majorProjectByStatusThisYearNew(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 本月度完成重大规划采购任务数量
+     *
+     * @param
+     * @return
+     */
+    StatisticalChartsResVo majorProjectByStatusThisMonthFi(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 本季度完成重大规划采购任务数量
      *
      * @param
      * @return
      */
-    StatisticalChartsResVo majorProjectByStatus(@Param("vo") PmDemandReqVo pmDemandReqVo);
+    StatisticalChartsResVo majorProjectByStatusThisQuaFi(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 本年度完成重大规划采购任务数量
+     *
+     * @param
+     * @return
+     */
+    StatisticalChartsResVo majorProjectByStatusThisYearFi(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 上年度结转:上年度“需求待提交”之后,“合同待填制”之前状态的项目属性为重大规划任务项目的数据
+     *
+     * @param
+     * @return
+     */
+    StatisticalChartsResVo majorProjectByStatusLastYear(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 累计“合同待填制”之前状态的项目属性为重大规划任务项目的数据
+     *
+     * @param
+     * @return
+     */
+    StatisticalChartsResVo majorProjectByStatusToThisYear(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 正常推进周期内的重大规划采购任务数量
+     *
+     * @param
+     * @return
+     */
+    StatisticalChartsResVo majorProjectByStatusWei(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 执行滞后的重大规划采购任务数量
+     *
+     * @param
+     * @return
+     */
+    StatisticalChartsResVo majorProjectByStatusChao(@Param("vo") PmDemandReqVo pmDemandReqVo);
 
     /**
      * //执行滞后数量:指本年度逾期项目中,项目属性为“重大规划”的项目数
@@ -381,5 +480,14 @@ public interface PmDemandMapper extends BaseMapper<PmDemand> {
      * @param pmDemandReqVo
      * @return
      */
-    StatisticalChartsResVo selectCCThisYear(PmDemandReqVo pmDemandReqVo);
+    StatisticalChartsResVo selectCCThisYear(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 统计超过计划完成采购时间的项目中,处在各阶段的数据
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    StatisticalChartsResVo countProjectExceedAndStatus(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
 }

+ 9 - 1
purchase-system/src/main/java/com/ozs/pm/service/IPmDemandService.java

@@ -88,7 +88,7 @@ public interface IPmDemandService extends IService<PmDemand> {
      */
     boolean releaseTask(PmDemandReqVo pmDemandReqVo);
 
-    boolean uploadFile(Long redId, Integer fileType, List<SysFileRef> sysFileRefs, String upateBy,boolean delOld);
+    boolean uploadFile(Long redId, Integer fileType, List<SysFileRef> sysFileRefs, String upateBy, boolean delOld);
 
     boolean uploadFile(Long redId, Integer fileType, List<SysFileRef> sysFileRefs, String upateBy);
 
@@ -340,4 +340,12 @@ public interface IPmDemandService extends IService<PmDemand> {
      * @return
      */
     List<StatisticalChartsResVo> countByPurchaseChange(PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 滞后主要直接原因
+     *
+     * @param pmDemandReqVo
+     * @return
+     */
+    AjaxResult exceedReason(PmDemandReqVo pmDemandReqVo);
 }

+ 6 - 0
purchase-system/src/main/java/com/ozs/pm/service/PmCallQuestionHisService.java

@@ -3,6 +3,8 @@ package com.ozs.pm.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ozs.pm.doman.PmCallQuestionHis;
 
+import java.util.List;
+
 /**
  * 质疑表历史表(PmCallQuestionHis)表服务接口
  *
@@ -11,4 +13,8 @@ import com.ozs.pm.doman.PmCallQuestionHis;
  */
 public interface PmCallQuestionHisService extends IService<PmCallQuestionHis> {
 
+    /**
+     * 取出所有的需求id
+     */
+    public List<Long> selectDemandIdAll();
 }

+ 10 - 0
purchase-system/src/main/java/com/ozs/pm/service/impl/PmCallQuestionHisServiceImpl.java

@@ -4,8 +4,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ozs.pm.mapper.PmCallQuestionHisMapper;
 import com.ozs.pm.doman.PmCallQuestionHis;
 import com.ozs.pm.service.PmCallQuestionHisService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * 质疑表历史表(PmCallQuestionHis)表服务实现类
  *
@@ -15,4 +18,11 @@ import org.springframework.stereotype.Service;
 @Service
 public class PmCallQuestionHisServiceImpl extends ServiceImpl<PmCallQuestionHisMapper, PmCallQuestionHis> implements PmCallQuestionHisService {
 
+    @Autowired
+    PmCallQuestionHisMapper questionHisMapper;
+
+    @Override
+    public List<Long> selectDemandIdAll() {
+        return this.questionHisMapper.selectDemandIdAll();
+    }
 }

+ 182 - 85
purchase-system/src/main/java/com/ozs/pm/service/impl/PmDemandServiceImpl.java

@@ -89,6 +89,7 @@ import com.ozs.pm.service.PmBidOpeningService;
 import com.ozs.pm.service.PmBidWinningOpeningRefService;
 import com.ozs.pm.service.PmBidWinningService;
 import com.ozs.pm.service.PmBookBuildingService;
+import com.ozs.pm.service.PmCallQuestionHisService;
 import com.ozs.pm.service.PmCallQuestionService;
 import com.ozs.pm.service.PmContractInfoService;
 import com.ozs.pm.service.PmDemandExpertRefService;
@@ -101,8 +102,6 @@ import com.ozs.system.domain.SysFileRef;
 import com.ozs.system.domain.vo.SysRegionVO;
 import com.ozs.system.domain.vo.responseVo.SysDeptResponseVo;
 import com.ozs.system.mapper.SysDeptMapper;
-import com.ozs.system.service.*;
-import com.ozs.system.mapper.SysRoleMapper;
 import com.ozs.system.service.ISysDeptService;
 import com.ozs.system.service.ISysDictDataService;
 import com.ozs.system.service.ISysDictTypeService;
@@ -211,6 +210,8 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
     private PmExpertFeedbackService pmExpertFeedbackService;
     @Autowired
     private PmProcurementDocumentsReviewService pmProcurementDocumentsReviewService;
+    @Autowired
+    private PmCallQuestionHisService questionHisService;
 
 
     /**
@@ -336,11 +337,11 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
 
                 //专家意见反馈
                 LambdaQueryWrapper<PmExpertFeedback> pmExpertFeedbackLambdaQueryWrapper = new LambdaQueryWrapper<>();
-                pmExpertFeedbackLambdaQueryWrapper.eq(PmExpertFeedback::getDemandId,demandId);
+                pmExpertFeedbackLambdaQueryWrapper.eq(PmExpertFeedback::getDemandId, demandId);
                 PmExpertFeedback pmExpertFeedback = pmExpertFeedbackService.getOne(pmExpertFeedbackLambdaQueryWrapper);
-                if(!ObjectUtils.isEmpty(pmExpertFeedback)){
+                if (!ObjectUtils.isEmpty(pmExpertFeedback)) {
                     PmExpertFeedbackResVo pmExpertFeedbackResVo = new PmExpertFeedbackResVo();
-                    BeanUtils.copyProperties(pmExpertFeedback,pmExpertFeedbackResVo);
+                    BeanUtils.copyProperties(pmExpertFeedback, pmExpertFeedbackResVo);
 
                     List<SysFileInfo> fileInfos = getSysFileInfoList(pmExpertFeedbackResVo.getId(), SysFileRefEnum.PM_EXPERT_FEEDBACK.getType());
                     if (!ObjectUtils.isEmpty(fileInfos)) {
@@ -351,11 +352,11 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
 
                 //采购文件编制审核
                 LambdaQueryWrapper<PmProcurementDocumentsReview> pmProcurementDocumentsReviewLambdaQueryWrapper = new LambdaQueryWrapper<>();
-                pmProcurementDocumentsReviewLambdaQueryWrapper.eq(PmProcurementDocumentsReview::getDemandId,demandId);
+                pmProcurementDocumentsReviewLambdaQueryWrapper.eq(PmProcurementDocumentsReview::getDemandId, demandId);
                 PmProcurementDocumentsReview pmProcurementDocumentsReview = pmProcurementDocumentsReviewService.getOne(pmProcurementDocumentsReviewLambdaQueryWrapper);
-                if(!ObjectUtils.isEmpty(pmProcurementDocumentsReview)){
+                if (!ObjectUtils.isEmpty(pmProcurementDocumentsReview)) {
                     PmProcurementDocumentsReviewResVo pmProcurementDocumentsReviewResVo = new PmProcurementDocumentsReviewResVo();
-                    BeanUtils.copyProperties(pmProcurementDocumentsReview,pmProcurementDocumentsReviewResVo);
+                    BeanUtils.copyProperties(pmProcurementDocumentsReview, pmProcurementDocumentsReviewResVo);
 
                     List<SysFileInfo> fileInfos = getSysFileInfoList(pmProcurementDocumentsReviewResVo.getId(), SysFileRefEnum.PM_BID_FILE.getType());
                     if (!ObjectUtils.isEmpty(fileInfos)) {
@@ -387,15 +388,15 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
 
                 //标前质疑投诉
                 LambdaQueryWrapper<PmCallQuestion> pmCallQuestionLambdaQueryWrapper = new LambdaQueryWrapper<>();
-                pmCallQuestionLambdaQueryWrapper.eq(PmCallQuestion::getDemandId,demandId)
-                        .eq(PmCallQuestion::getType,'0').orderByDesc(PmCallQuestion::getCallQuestionTime);
-                List<PmCallQuestion>  pmCallQuestionList = pmCallQuestionService.list(pmCallQuestionLambdaQueryWrapper);
-                if(!ObjectUtils.isEmpty(pmCallQuestionList)){
+                pmCallQuestionLambdaQueryWrapper.eq(PmCallQuestion::getDemandId, demandId)
+                        .eq(PmCallQuestion::getType, '0').orderByDesc(PmCallQuestion::getCallQuestionTime);
+                List<PmCallQuestion> pmCallQuestionList = pmCallQuestionService.list(pmCallQuestionLambdaQueryWrapper);
+                if (!ObjectUtils.isEmpty(pmCallQuestionList)) {
                     List<PmCallQuestionResVo> pmCallQuestionResVoList = new ArrayList<>();
                     List<SysFileInfo> fileInfosAll = new ArrayList<>();
-                    for(PmCallQuestion pmCallQuestion : pmCallQuestionList){
+                    for (PmCallQuestion pmCallQuestion : pmCallQuestionList) {
                         PmCallQuestionResVo pmCallQuestionResVo = new PmCallQuestionResVo();
-                        BeanUtils.copyProperties(pmCallQuestion,pmCallQuestionResVo);
+                        BeanUtils.copyProperties(pmCallQuestion, pmCallQuestionResVo);
                         List<SysFileInfo> fileInfos = getSysFileInfoList(pmCallQuestionResVo.getId(), SysFileRefEnum.PM_PRE_BID_CALL_QUESTION.getType());
                         if (!ObjectUtils.isEmpty(fileInfos)) {
                             fileInfosAll.addAll(fileInfos);
@@ -439,15 +440,15 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
 
                 //标后质疑
                 LambdaQueryWrapper<PmCallQuestion> pmCallQuestionLambdaQueryWrapper2 = new LambdaQueryWrapper<>();
-                pmCallQuestionLambdaQueryWrapper2.eq(PmCallQuestion::getDemandId,demandId)
-                        .eq(PmCallQuestion::getType,'1').orderByDesc(PmCallQuestion::getCallQuestionTime);
-                List<PmCallQuestion>  pmCallQuestionList2 = pmCallQuestionService.list(pmCallQuestionLambdaQueryWrapper2);
-                if(!ObjectUtils.isEmpty(pmCallQuestionList2)){
+                pmCallQuestionLambdaQueryWrapper2.eq(PmCallQuestion::getDemandId, demandId)
+                        .eq(PmCallQuestion::getType, '1').orderByDesc(PmCallQuestion::getCallQuestionTime);
+                List<PmCallQuestion> pmCallQuestionList2 = pmCallQuestionService.list(pmCallQuestionLambdaQueryWrapper2);
+                if (!ObjectUtils.isEmpty(pmCallQuestionList2)) {
                     List<PmCallQuestionResVo> pmCallQuestionResVoList = new ArrayList<>();
                     List<SysFileInfo> fileInfosAll = new ArrayList<>();
-                    for(PmCallQuestion pmCallQuestion : pmCallQuestionList2){
+                    for (PmCallQuestion pmCallQuestion : pmCallQuestionList2) {
                         PmCallQuestionResVo pmCallQuestionResVo = new PmCallQuestionResVo();
-                        BeanUtils.copyProperties(pmCallQuestion,pmCallQuestionResVo);
+                        BeanUtils.copyProperties(pmCallQuestion, pmCallQuestionResVo);
                         List<SysFileInfo> fileInfos = getSysFileInfoList(pmCallQuestionResVo.getId(), SysFileRefEnum.PM_BID_CALL_QEUSTION_FILE.getType());
                         if (!ObjectUtils.isEmpty(fileInfos)) {
                             fileInfosAll.addAll(fileInfos);
@@ -479,7 +480,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                         }
 
 
-                        if("1".equals(pmBidFailure.getCallQuestion())){ //有质疑
+                        if ("1".equals(pmBidFailure.getCallQuestion())) { //有质疑
                             PmCallQuestionResVo pmCallQuestionResVo = new PmCallQuestionResVo();
                             pmCallQuestionResVo.setCallQuestion(pmBidFailure.getCallQuestion());
                             pmCallQuestionResVo.setCallQuestionTime(pmBidFailure.getCallQuestionTime());
@@ -650,39 +651,39 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                 }
 
                 LambdaQueryWrapper<PmExpertFeedback> pmExpertFeedbackLambdaQueryWrapper = new LambdaQueryWrapper<>();
-                pmExpertFeedbackLambdaQueryWrapper.eq(PmExpertFeedback::getDemandId,vo.getDemandId());
+                pmExpertFeedbackLambdaQueryWrapper.eq(PmExpertFeedback::getDemandId, vo.getDemandId());
                 PmExpertFeedback pmExpertFeedback = this.pmExpertFeedbackService.getOne(pmExpertFeedbackLambdaQueryWrapper);
-                if(pmExpertFeedback != null){
+                if (pmExpertFeedback != null) {
                     vo.setProjectNumber(pmExpertFeedback.getProjectNumber());
                     vo.setDocumentReviewTime(pmExpertFeedback.getDocumentReviewTime());
                 }
 
                 LambdaQueryWrapper<PmProcurementDocumentsReview> pmProcurementDocumentsReviewLambdaQueryWrapper = new LambdaQueryWrapper<>();
-                pmProcurementDocumentsReviewLambdaQueryWrapper.eq(PmProcurementDocumentsReview::getDemandId,vo.getDemandId());
+                pmProcurementDocumentsReviewLambdaQueryWrapper.eq(PmProcurementDocumentsReview::getDemandId, vo.getDemandId());
                 PmProcurementDocumentsReview pmProcurementDocumentsReview = this.pmProcurementDocumentsReviewService.getOne(pmProcurementDocumentsReviewLambdaQueryWrapper);
-                if(pmProcurementDocumentsReview != null){
+                if (pmProcurementDocumentsReview != null) {
                     vo.setProcurementOfficeApprovalTime(pmProcurementDocumentsReview.getProcurementOfficeApprovalTime());
                 }
 
-                if(Integer.parseInt(vo.getProjectStatus()) > 12 && Integer.parseInt(vo.getProjectStatus()) != 18){
+                if (Integer.parseInt(vo.getProjectStatus()) > 12 && Integer.parseInt(vo.getProjectStatus()) != 18) {
                     LambdaQueryWrapper<PmReleaseAnnouncement> pmReleaseAnnouncementLambdaQueryWrapper = new LambdaQueryWrapper<>();
-                    pmReleaseAnnouncementLambdaQueryWrapper.eq(PmReleaseAnnouncement::getDemandId,vo.getDemandId())
+                    pmReleaseAnnouncementLambdaQueryWrapper.eq(PmReleaseAnnouncement::getDemandId, vo.getDemandId())
                             .orderByDesc(PmReleaseAnnouncement::getReleaseTime)
-                             .last(" limit 1");
+                            .last(" limit 1");
                     PmReleaseAnnouncement pmReleaseAnnouncement = this.pmReleaseAnnouncementService.getOne(pmReleaseAnnouncementLambdaQueryWrapper);
-                    if(pmReleaseAnnouncement != null){
+                    if (pmReleaseAnnouncement != null) {
                         vo.setAnnouncementReleaseTime(pmReleaseAnnouncement.getReleaseTime());
                         vo.setTenderOpenTime(pmReleaseAnnouncement.getTenderOpenTime());
                     }
                 }
 
-                if(Integer.parseInt(vo.getProjectStatus()) > 15  && Integer.parseInt(vo.getProjectStatus()) != 16 && Integer.parseInt(vo.getProjectStatus()) != 18){
+                if (Integer.parseInt(vo.getProjectStatus()) > 15 && Integer.parseInt(vo.getProjectStatus()) != 16 && Integer.parseInt(vo.getProjectStatus()) != 18) {
                     LambdaQueryWrapper<PmBidWinning> pmBidWinningLambdaQueryWrapper = new LambdaQueryWrapper<>();
-                    pmBidWinningLambdaQueryWrapper.eq(PmBidWinning::getDemandId,vo.getDemandId()).eq(PmBidWinning::getStatus,BidWinningStatus.NORMAL.getCode())
+                    pmBidWinningLambdaQueryWrapper.eq(PmBidWinning::getDemandId, vo.getDemandId()).eq(PmBidWinning::getStatus, BidWinningStatus.NORMAL.getCode())
                             .orderByDesc(PmBidWinning::getBidAnnouncementTime)
                             .last(" limit 1");
                     PmBidWinning pmBidWinning = this.pmBidWinningService.getOne(pmBidWinningLambdaQueryWrapper);
-                    if(pmBidWinning != null){
+                    if (pmBidWinning != null) {
                         vo.setBidAnnouncementTime(pmBidWinning.getBidAnnouncementTime());
                     }
                 }
@@ -807,33 +808,33 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
                 || PmProjectStatus.DEMAND_AUDIT_RETURN.getCode().equals(projectStatus)
                 || PmProjectStatus.WASTE_BID_RETURN.getCode().equals(projectStatus)) {
             moduleName = "需求填制";
-        } else if(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode().equals(projectStatus)) {
+        } else if (PmProjectStatus.DEMAND_WAIT_COMMIT.getCode().equals(projectStatus)) {
             moduleName = "需求提交";
-        } else if(PmProjectStatus.DEMAND_WAIT_AUDIT.getCode().equals(projectStatus)) {
+        } else if (PmProjectStatus.DEMAND_WAIT_AUDIT.getCode().equals(projectStatus)) {
             moduleName = "需求审核";
-        } else if(PmProjectStatus.TASK_WAIT_RELEASE.getCode().equals(projectStatus)) {
+        } else if (PmProjectStatus.TASK_WAIT_RELEASE.getCode().equals(projectStatus)) {
             moduleName = "任务下达";
-        } else if(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode().equals(projectStatus)) {
+        } else if (PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode().equals(projectStatus)) {
             moduleName = "选取代理";
-        } else if(PmProjectStatus.EXPERT_FEEDBACK.getCode().equals(projectStatus)) {
+        } else if (PmProjectStatus.EXPERT_FEEDBACK.getCode().equals(projectStatus)) {
             moduleName = "上传意见反馈单";
-        } else if(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode().equals(projectStatus)) {
+        } else if (PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode().equals(projectStatus)) {
             moduleName = "上传招标文件审批表";
-        } else if(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode().equals(projectStatus)) {
+        } else if (PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode().equals(projectStatus)) {
             moduleName = "采购公告发布";
-        } else if(PmProjectStatus.PRE_BID_QUERY.getCode().equals(projectStatus)) {
+        } else if (PmProjectStatus.PRE_BID_QUERY.getCode().equals(projectStatus)) {
             moduleName = "标前质疑投诉";
-        } else if(PmProjectStatus.WAIT_OPEN_BID.getCode().equals(projectStatus)) {
+        } else if (PmProjectStatus.WAIT_OPEN_BID.getCode().equals(projectStatus)) {
             moduleName = "填写专家信息,开评标";
-        }  else if(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode().equals(projectStatus) || PmProjectStatus.WASTE_BID_HANDLE.getCode().equals(projectStatus)) {
+        } else if (PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode().equals(projectStatus) || PmProjectStatus.WASTE_BID_HANDLE.getCode().equals(projectStatus)) {
             moduleName = "评标结果公告";
-        }  else if(PmProjectStatus.POST_BID_QUERY.getCode().equals(projectStatus)) {
+        } else if (PmProjectStatus.POST_BID_QUERY.getCode().equals(projectStatus)) {
             moduleName = "质疑处理,上传中标通知书";
-        }  else if(PmProjectStatus.CONTRACT_WAIT_FILL.getCode().equals(projectStatus)) {
+        } else if (PmProjectStatus.CONTRACT_WAIT_FILL.getCode().equals(projectStatus)) {
             moduleName = "合同填制";
-        } else if(PmProjectStatus.UNDER_CONSTRUCTION.getCode().equals(projectStatus)) {
+        } else if (PmProjectStatus.UNDER_CONSTRUCTION.getCode().equals(projectStatus)) {
             moduleName = "建设文档填制";
-        } else if(PmProjectStatus.COMPLETION_CONSTRUCTION.getCode().equals(projectStatus)) {
+        } else if (PmProjectStatus.COMPLETION_CONSTRUCTION.getCode().equals(projectStatus)) {
             moduleName = "项目归档";
         }
         return moduleName;
@@ -947,11 +948,11 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean uploadFile(Long redId, Integer fileType, List<SysFileRef> sysFileRefs, String upateBy,boolean delOld) {
+    public boolean uploadFile(Long redId, Integer fileType, List<SysFileRef> sysFileRefs, String upateBy, boolean delOld) {
 
         if (!ObjectUtils.isEmpty(sysFileRefs)) {
             //删除老的
-            if(delOld){
+            if (delOld) {
                 QueryWrapper<SysFileRef> queryWrapper = new QueryWrapper<>();
                 queryWrapper.lambda().eq(SysFileRef::getRedId, redId)
                         .eq(SysFileRef::getType, fileType);
@@ -983,7 +984,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean uploadFile(Long redId, Integer fileType, List<SysFileRef> sysFileRefs, String upateBy) {
-        return uploadFile(redId, fileType, sysFileRefs, upateBy,false);
+        return uploadFile(redId, fileType, sysFileRefs, upateBy, false);
     }
 
     @Override
@@ -1974,16 +1975,32 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
     public AjaxResult countProjectExceed(PmDemandReqVo pmDemandReqVo) {
         //是-1就是查询自己及子孙级以下,否则只查询指定部门
         pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
-        HashMap<String, String> resMap = new HashMap<>();
+        List<StatisticalChartsResVo> resVos = new ArrayList<>();
         //执行滞后采购项目:本年度所有的逾期项目数
         //预算金额:本年度所有逾期项目累加的预算金额
-        StatisticalChartsResVo resVo = pmDemandMapper.countProjectExceed(pmDemandReqVo);
-        resMap.put("执行滞后采购项目", resVo.getNum() + "");
-        resMap.put("预算金额", resVo.getEvaluationTotal() + "");
-        //滞后项目数量占比:指本年度逾期项目数量/本年度所有项目数量
-        Integer thisYear = pmDemandMapper.countThisYear(pmDemandReqVo);
-        resMap.put("滞后项目数量占比", getPercent(resVo.getNum(), thisYear));
-        return AjaxResult.success(resMap);
+        StatisticalChartsResVo resVo = pmDemandMapper.countProjectExceedThisYear(pmDemandReqVo);
+        resVo.setColumnName("本年度执行滞后任务新增数量");
+        resVos.add(resVo);
+        StatisticalChartsResVo resVo2 = pmDemandMapper.countProjectExceedThisQua(pmDemandReqVo);
+        resVo2.setColumnName("本季度执行滞后任务新增数量");
+        resVos.add(resVo2);
+        StatisticalChartsResVo resVo3 = pmDemandMapper.countProjectExceedThisMonth(pmDemandReqVo);
+        resVo3.setColumnName("本月执行滞后任务新增数量");
+        resVos.add(resVo3);
+        StatisticalChartsResVo resVo4 = pmDemandMapper.countProjectExceedAllNum(pmDemandReqVo);
+        resVo4.setColumnName("累计积压的执行滞后采购任务数");
+        resVos.add(resVo4);
+        //执行停滞采购任务数量--退回的采购任务数量
+        List<String> tzrw = new ArrayList<>();
+        tzrw.add(PmProjectStatus.DEMAND_AUDIT_RETURN.getCode());
+        pmDemandReqVo.setProjectStatusList(tzrw);
+        Map<String, String> map = pmDemandMapper.purchaseProjectDistribution(pmDemandReqVo);
+        StatisticalChartsResVo resVo5 = new StatisticalChartsResVo();
+        resVo5.setColumnName("执行停滞采购任务数量");
+        resVo5.setNum(Integer.parseInt(map.get("countNumber")));
+        resVo5.setEvaluationTotal(BigDecimal.valueOf(Double.valueOf(map.get("evaluationTotal"))));
+        resVos.add(resVo5);
+        return AjaxResult.success(resVos);
     }
 
     /**
@@ -2160,37 +2177,70 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         //是-1就是查询自己及子孙级以下,否则只查询指定部门
         pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
         List<StatisticalChartsResVo> resVos = new ArrayList<>();
-        //数量:指本年度状态为“项目建设完成”的项目属性为“重大规划”的项目数
-        //预算金额:指本年度状态为“项目建设完成”的项目属性为“重大规划”的项目累加的预算金额
-        StatisticalChartsResVo resVo = new StatisticalChartsResVo();
-        pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.COMPLETION_CONSTRUCTION.getCode()));
-        resVo = pmDemandMapper.majorProjectByStatus(pmDemandReqVo);
-        resVo.setColumnName("今年已完成数量");
+        //本月度新提报重大规划采购任务数量
+        pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode()));
+        StatisticalChartsResVo resVo = pmDemandMapper.majorProjectByStatusThisMonthNew(pmDemandReqVo);
+        resVo.setColumnName("本月度新提报重大规划采购任务数量");
         resVos.add(resVo);
-
-        //正常推进项目:指本年度正在进行中的项目属性为“重大规划”的项目数
-        //预算金额:指本年度正在进行中的项目属性为“重大规划”的项目累加的预算金额
-        StatisticalChartsResVo resVo1 = new StatisticalChartsResVo();
-        pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.UNDER_CONSTRUCTION.getCode()));
-        resVo1 = pmDemandMapper.majorProjectByStatus(pmDemandReqVo);
-        resVo1.setColumnName("正常推进数量");
-        resVos.add(resVo1);
-
-        //执行滞后数量:指本年度逾期项目中,项目属性为“重大规划”的项目数
-        //预算金额:指本年度正在进行中的项目属性为“重大规划”的项目累加的预算金额
-        StatisticalChartsResVo resVo2 = new StatisticalChartsResVo();
-        resVo2 = pmDemandMapper.countMajorProjectExceed(pmDemandReqVo);
-        resVo2.setColumnName("执行滞后数量");
+        //本季度新提报重大规划采购任务数量
+        pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode()));
+        StatisticalChartsResVo resVo2 = pmDemandMapper.majorProjectByStatusThisQuaNew(pmDemandReqVo);
+        resVo2.setColumnName("本季度新提报重大规划采购任务数量");
         resVos.add(resVo2);
-
-        //上年度重大规划采购任务数量:指上年度项目中,项目属性为“重大规划”的项目数
-        //预算金额:指上年度项目中,项目属性为“重大规划”的项目累加的预算(合同)金额
-        StatisticalChartsResVo resVo3 = new StatisticalChartsResVo();
-        resVo3 = pmDemandMapper.countMajorProjectLastYear(pmDemandReqVo);
-        resVo3.setColumnName("上年度重大规划采购任务数量");
+        //本年度新提报重大规划采购任务数量
+        pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.DEMAND_WAIT_COMMIT.getCode()));
+        StatisticalChartsResVo resVo3 = pmDemandMapper.majorProjectByStatusThisYearNew(pmDemandReqVo);
+        resVo3.setColumnName("本年度新提报重大规划采购任务数量");
         resVos.add(resVo3);
-
-        //resVo2=pmDemandMapper.majorProjectByStatus(PmProjectStatus.COMPLETION_CONSTRUCTION.getCode());
+        //本月度完成重大规划采购任务数量
+        pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.CONTRACT_WAIT_FILL.getCode()));
+        StatisticalChartsResVo resVo4 = pmDemandMapper.majorProjectByStatusThisMonthFi(pmDemandReqVo);
+        resVo4.setColumnName("本月度完成重大规划采购任务数量");
+        resVos.add(resVo4);
+        //本季度完成重大规划采购任务数量
+        pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.CONTRACT_WAIT_FILL.getCode()));
+        StatisticalChartsResVo resVo5 = pmDemandMapper.majorProjectByStatusThisQuaFi(pmDemandReqVo);
+        resVo5.setColumnName("本季度完成重大规划采购任务数量");
+        resVos.add(resVo5);
+        //本年度完成重大规划采购任务数量
+        pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.CONTRACT_WAIT_FILL.getCode()));
+        StatisticalChartsResVo resVo6 = pmDemandMapper.majorProjectByStatusThisYearFi(pmDemandReqVo);
+        resVo6.setColumnName("本年度完成重大规划采购任务数量");
+        resVos.add(resVo6);
+        //上年度结转和本年度新提报重大规划采购任务累计项目数量
+        List<String> yearLastZ = new ArrayList<>();
+        yearLastZ.add(PmProjectStatus.DEMAND_WAIT_AUDIT.getCode());
+        yearLastZ.add(PmProjectStatus.DEMAND_AUDIT_RETURN.getCode());
+        yearLastZ.add(PmProjectStatus.TASK_WAIT_RELEASE.getCode());
+        yearLastZ.add(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
+        yearLastZ.add(PmProjectStatus.EXPERT_FEEDBACK.getCode());
+        yearLastZ.add(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode());
+        yearLastZ.add(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode());
+        yearLastZ.add(PmProjectStatus.PRE_BID_QUERY.getCode());
+        yearLastZ.add(PmProjectStatus.WAIT_OPEN_BID.getCode());
+        yearLastZ.add(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode());
+        yearLastZ.add(PmProjectStatus.WASTE_BID_HANDLE.getCode());
+        yearLastZ.add(PmProjectStatus.POST_BID_QUERY.getCode());
+        yearLastZ.add(PmProjectStatus.WASTE_BID_RETURN.getCode());
+        pmDemandReqVo.setProjectStatusList(yearLastZ);
+        StatisticalChartsResVo resVo7 = pmDemandMapper.majorProjectByStatusLastYear(pmDemandReqVo);
+        resVo7.setColumnName("上年度结转和本年度新提报重大规划采购任务累计项目数量");
+        resVo7.setNum(resVo7.getNum() + resVo3.getNum());
+        resVo7.setEvaluationTotal(resVo7.getEvaluationTotal().add(resVo3.getEvaluationTotal()));
+        resVos.add(resVo7);
+        //今年以来累计完成数量
+        pmDemandReqVo.setProjectStatus(Long.valueOf(PmProjectStatus.CONTRACT_WAIT_FILL.getCode()));
+        StatisticalChartsResVo resVo8 = pmDemandMapper.majorProjectByStatusToThisYear(pmDemandReqVo);
+        resVo8.setColumnName("今年以来累计完成数量");
+        resVos.add(resVo8);
+        //正常推进周期内的重大规划采购任务数量
+        StatisticalChartsResVo resVo9 = pmDemandMapper.majorProjectByStatusWei(pmDemandReqVo);
+        resVo9.setColumnName("正常推进周期内的重大规划采购任务数量");
+        resVos.add(resVo9);
+        //执行滞后的重大规划采购任务数量
+        StatisticalChartsResVo resVo10 = pmDemandMapper.majorProjectByStatusChao(pmDemandReqVo);
+        resVo10.setColumnName("执行滞后的重大规划采购任务数量");
+        resVos.add(resVo10);
         return AjaxResult.success(resVos);
     }
 
@@ -3260,6 +3310,53 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         return byChange;
     }
 
+    @Override
+    public AjaxResult exceedReason(PmDemandReqVo pmDemandReqVo) {
+        List<StatisticalChartsResVo> resVos = new ArrayList<>();
+        //是-1就是查询自己及子孙级以下,否则只查询指定部门
+        pmDemandReqVo.setDeptList(isQueryAll(pmDemandReqVo.getPurchaseDeptId()));
+        //统计超过计划完成采购时间的项目中,处在各阶段的数据包括以下内容:
+        //1、需求编制对接数量/涉及金额:状态为“采购需求对接”的数量及预算金额
+        List<String> xqdj = new ArrayList<>();
+        xqdj.add(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
+        pmDemandReqVo.setProjectStatusList(xqdj);
+        StatisticalChartsResVo resVo = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
+        resVo.setColumnName("需求编制对接数量");
+        resVos.add(resVo);
+        //2、采购文件编制审核数量/涉及金额:状态为“采购文件编制审核“的数量及预算金额
+        List<String> wjsh = new ArrayList<>();
+        wjsh.add(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode());
+        pmDemandReqVo.setProjectStatusList(wjsh);
+        StatisticalChartsResVo resVo2 = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
+        resVo2.setColumnName("采购文件编制审核数量");
+        resVos.add(resVo2);
+        //3、质疑、投诉、复议、信访举报数量/涉及金额:按钮”质疑投诉”进行质疑过的项目及预算金额
+        List<Long> demandIdAll = questionHisService.selectDemandIdAll();
+        pmDemandReqVo.setDemandIdAll(demandIdAll);
+        StatisticalChartsResVo resVo3 = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
+        resVo3.setColumnName("质疑、投诉、复议、信访举报数量");
+        resVos.add(resVo3);
+        //4、流标废标数量/涉及金额:状态为“流废标处置”的项目及预算金额
+        List<String> fblb = new ArrayList<>();
+        fblb.add(PmProjectStatus.WASTE_BID_HANDLE.getCode());
+        pmDemandReqVo.setProjectStatusList(fblb);
+        StatisticalChartsResVo resVo4 = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
+        resVo4.setColumnName("流标废标数量");
+        resVos.add(resVo4);
+        //5、其他原因项目数量/涉及金额:统计“专家意见反馈”、“采购公告发布”、”待开标“、”评标结果公告“、“标后质疑”状态的数据
+        List<String> qtyy = new ArrayList<>();
+        qtyy.add(PmProjectStatus.EXPERT_FEEDBACK.getCode());
+        qtyy.add(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode());
+        qtyy.add(PmProjectStatus.WAIT_OPEN_BID.getCode());
+        qtyy.add(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode());
+        qtyy.add(PmProjectStatus.POST_BID_QUERY.getCode());
+        pmDemandReqVo.setProjectStatusList(qtyy);
+        StatisticalChartsResVo resVo5 = pmDemandMapper.countProjectExceedAndStatus(pmDemandReqVo);
+        resVo5.setColumnName("其他原因项目数量");
+        resVos.add(resVo5);
+        return AjaxResult.success(resVos);
+    }
+
     //查询不同状态下的项目数据
     public List<PmDemandResVo> getListByStatus(String projectStatus) {
         LambdaQueryWrapper<PmDemand> lw = new LambdaQueryWrapper<PmDemand>();

+ 3 - 0
purchase-system/src/main/resources/mapper/pm/PmCallQuestionHisMapper.xml

@@ -3,4 +3,7 @@
 <mapper namespace="com.ozs.pm.mapper.PmCallQuestionHisMapper">
 
 
+    <select id="selectDemandIdAll" resultType="java.lang.Long">
+
+    </select>
 </mapper>

+ 177 - 40
purchase-system/src/main/resources/mapper/pm/PmDemandMapper.xml

@@ -5,7 +5,7 @@
 <mapper namespace="com.ozs.pm.mapper.PmDemandMapper">
 
     <select id="selectByDemandIdList" parameterType="java.util.List" resultType="com.ozs.pm.doman.PmDemand">
-        select * from pm_demand where project_status &gt;= 12 and demand_id in
+        select * from pm_demand where project_status &gt; 12 and demand_id in
         <foreach item="item" collection="demandIdList" separator="," open="(" close=")" index="">
             #{item}
         </foreach>
@@ -18,7 +18,7 @@
             and project_name like '%' + #{projectName} + '%'
         </if>
         <if test="startTime != null  "><!-- 开始时间检索 -->
-            and date_format(plan_demand_sub_time,'%y%m%d') &gt;= date_format(#{startTime},'%y%m%d')
+            and date_format(plan_demand_sub_time,'%y%m%d') &gt; date_format(#{startTime},'%y%m%d')
         </if>
         <if test="endTime != null  "><!-- 结束时间检索 -->
             and date_format(plan_demand_sub_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
@@ -150,7 +150,7 @@
         AND evaluation &gt; #{vo.evaluation}
     </select>
 
-    <select id="countProjectExceed" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+    <select id="countProjectExceedThisYear" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
             resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
         SELECT COUNT(demand_id) num, ifnull(sum(evaluation), 0) evaluationTotal
         FROM `pm_demand`
@@ -159,10 +159,58 @@
                  separator="," open="(" close=")">
             #{item}
         </foreach>
-        AND (real_demand_commit_time > plan_demand_sub_time
-        or real_purchase_finish_time > plan_purchase_finish_time
-        or real_deliver_time > plan_deliver_time)
-        and DATE_FORMAT(create_time, '%Y') = YEAR(NOW())
+        AND ( real_purchase_finish_time > plan_purchase_finish_time )
+        and YEAR(create_time) = YEAR(NOW())
+    </select>
+
+    <select id="countProjectExceedThisQua" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        SELECT COUNT(demand_id) num, ifnull(sum(evaluation), 0) evaluationTotal
+        FROM `pm_demand`
+        WHERE purchase_dept_id in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND ( real_purchase_finish_time > plan_purchase_finish_time )
+        and quarter(create_time) = quarter(NOW())
+    </select>
+
+    <select id="countProjectExceedThisMonth" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        SELECT COUNT(demand_id) num, ifnull(sum(evaluation), 0) evaluationTotal
+        FROM `pm_demand`
+        WHERE purchase_dept_id in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND ( real_purchase_finish_time > plan_purchase_finish_time )
+        and MONTH(create_time) = MONTH(NOW())
+    </select>
+
+    <select id="countProjectExceedAllNum" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        SELECT COUNT(demand_id) num, ifnull(sum(evaluation), 0) evaluationTotal
+        FROM `pm_demand`
+        WHERE purchase_dept_id in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND ( real_purchase_finish_time > plan_purchase_finish_time)
+    </select>
+
+    <select id="countProjectExceedTZ" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        SELECT COUNT(demand_id) num, ifnull(sum(evaluation), 0) evaluationTotal
+        FROM `pm_demand`
+        WHERE purchase_dept_id in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+
     </select>
 
     <select id="countThisYear" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
@@ -174,7 +222,7 @@
                  separator="," open="(" close=")">
             #{item}
         </foreach>
-        AND DATE_FORMAT(create_time, '%Y') = YEAR(NOW())
+        AND YEAR(create_time) = YEAR(NOW())
     </select>
 
     <select id="countProjectExceedYear" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
@@ -243,8 +291,7 @@
 
     </select>
 
-    <select id="majorProjectByStatus" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
-            resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+    <sql id="majorProjectByStatus">
         SELECT COUNT(demand_id) num, ifnull(sum(evaluation), 0) evaluationTotal
         FROM `pm_demand`
         WHERE purchase_dept_id in
@@ -253,8 +300,68 @@
             #{item}
         </foreach>
         AND find_in_set('1', project_attr)
-        AND `project_status` = #{vo.projectStatus}
-        AND DATE_FORMAT(create_time, '%Y') = year(now())
+    </sql>
+
+    <select id="majorProjectByStatusThisMonthNew" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        <include refid="majorProjectByStatus"></include>
+        AND MONTH(create_time ) = MONTH(now())
+        AND project_status &gt; #{vo.projectStatus}
+    </select>
+    <select id="majorProjectByStatusThisQuaNew" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        <include refid="majorProjectByStatus"></include>
+        AND QUARTER(create_time ) = QUARTER(now())
+        AND project_status &gt; #{vo.projectStatus}
+    </select>
+    <select id="majorProjectByStatusThisYearNew" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        <include refid="majorProjectByStatus"></include>
+        AND YEAR(create_time ) = YEAR(now())
+        AND project_status &gt; #{vo.projectStatus}
+    </select>
+    <select id="majorProjectByStatusThisMonthFi" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        <include refid="majorProjectByStatus"></include>
+        AND MONTH(create_time ) = MONTH(now())
+        AND project_status &lt; #{vo.projectStatus}
+    </select>
+    <select id="majorProjectByStatusThisQuaFi" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        <include refid="majorProjectByStatus"></include>
+        AND QUARTER(create_time ) = QUARTER(now())
+        AND project_status &lt; #{vo.projectStatus}
+    </select>
+    <select id="majorProjectByStatusThisYearFi" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        <include refid="majorProjectByStatus"></include>
+        AND YEAR(create_time ) = YEAR(now())
+        AND project_status &lt; #{vo.projectStatus}
+    </select>
+    <select id="majorProjectByStatusLastYear" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        <include refid="majorProjectByStatus"></include>
+        AND YEAR(create_time ) = YEAR(now())-1
+        AND project_status in
+        <foreach collection="vo.projectStatusList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+    </select>
+    <select id="majorProjectByStatusToThisYear" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        <include refid="majorProjectByStatus"></include>
+        AND project_status &lt; #{vo.projectStatus}
+    </select>
+    <select id="majorProjectByStatusWei" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        <include refid="majorProjectByStatus"></include>
+        AND real_purchase_finish_time &lt;plan_purchase_finish_time
+    </select>
+    <select id="majorProjectByStatusChao" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
+            resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
+        <include refid="majorProjectByStatus"></include>
+        AND real_purchase_finish_time &gt;plan_purchase_finish_time
     </select>
 
     <select id="countMajorProjectExceed" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
@@ -269,7 +376,7 @@
         or real_purchase_finish_time > plan_purchase_finish_time
         or real_deliver_time > plan_deliver_time)
         AND find_in_set('1', project_attr)
-        and DATE_FORMAT(create_time, '%Y') = YEAR(NOW())
+        and YEAR(create_time ) = YEAR(NOW())
     </select>
 
     <select id="taskQuantityYear" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
@@ -279,19 +386,17 @@
         WHERE find_in_set('1'
             , project_attr)
           AND `project_status` = #{code}
-          and DATE_FORMAT(create_time
-                  , '%Y') = YEAR(NOW())
+          and YEAR(create_time) = YEAR(NOW())
     </select>
 
     <select id="taskQuantityLastYear" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo"
             parameterType="java.lang.String">
-        SELECT YEAR (NOW()) - 1 columnName, COUNT (demand_id) num
+        SELECT YEAR(NOW()) - 1 columnName, COUNT(demand_id) num
         FROM `pm_demand`
         WHERE find_in_set('1'
             , project_attr)
           AND `project_status` = #{code}
-          and DATE_FORMAT(create_time
-            , '%Y') = YEAR (NOW()) - 1
+          and YEAR(create_time) = YEAR(NOW()) - 1
     </select>
 
     <select id="countEveryStatusNum" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
@@ -304,7 +409,7 @@
             #{item}
         </foreach>
         AND `project_status` IN (9, 10, 11, 12, 13, 14,15,16,17)
-        and DATE_FORMAT(create_time, '%Y') = YEAR(NOW())
+        and YEAR(create_time) = YEAR(NOW())
         GROUP BY project_status
     </select>
 
@@ -312,7 +417,8 @@
     <select id="selectByPlanId" parameterType="java.lang.Long" resultType="com.ozs.pm.doman.PmDemand">
         select *
         from pm_demand
-        where plan_id = #{planId} limit 1
+        where plan_id = #{planId}
+        limit 1
     </select>
 
     <select id="countMajorProjectLastYear" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
@@ -326,7 +432,7 @@
                  separator="," open="(" close=")">
             #{item}
         </foreach>
-        AND find_in_set('1', project_attr) AND DATE_FORMAT(create_time, '%Y') =YEAR(NOW()) - 1 ) de
+        AND find_in_set('1', project_attr) AND YEAR(create_time) =YEAR(NOW()) - 1 ) de
         WHERE d.demand_id = c.demand_id
         AND find_in_set('1', d.project_attr)
         AND d.purchase_dept_id in
@@ -334,11 +440,11 @@
                  separator="," open="(" close=")">
             #{item}
         </foreach>
-        AND DATE_FORMAT(d.create_time, '%Y') = YEAR(NOW()) - 1
+        AND YEAR(d.create_time) = YEAR(NOW()) - 1
     </select>
 
     <select id="countProjectMajorByYear" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
-        SELECT DATE_FORMAT(create_time, '%Y') columnName, COUNT(demand_id) num
+        SELECT YEAR(create_time) columnName, COUNT(demand_id) num
         FROM `pm_demand`
         WHERE purchase_dept_id in
         <foreach collection="vo.deptList" item="item" index="index"
@@ -346,7 +452,7 @@
             #{item}
         </foreach>
         AND find_in_set('1', project_attr)
-        GROUP BY DATE_FORMAT(create_time, '%Y')
+        GROUP BY YEAR(create_time)
         order by create_time asc
     </select>
 
@@ -372,7 +478,7 @@
         </foreach>
         AND find_in_set('1', project_attr)
         and QUARTER(create_time) = #{quarter}
-        AND DATE_FORMAT(create_time, '%Y') = #{year}
+        AND YEAR(create_time) = #{year}
     </select>
 
     <!-- 正常推进项目 -->
@@ -404,7 +510,7 @@
     </select>
 
     <select id="selectMinYear" resultType="java.lang.Integer">
-        select min(year (plan_demand_sub_time))
+        select min(year(plan_demand_sub_time))
         from pm_demand
     </select>
 
@@ -555,12 +661,13 @@
             or real_purchase_finish_time > plan_purchase_finish_time
             or real_deliver_time > plan_deliver_time)
           AND find_in_set('1', project_attr)
-          and DATE_FORMAT(create_time, '%Y') = YEAR(NOW())
+          and YEAR(create_time) = YEAR(NOW())
     </select>
 
     <select id="purchaseProjectDistribution" parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo"
             resultType="java.util.Map">
-        select count(demand_id) countNumber from pm_demand where purchase_dept_id in
+        select count(demand_id) countNumber,ifnull(sum(evaluation), 0) evaluationTotal
+        from pm_demand where purchase_dept_id in
         <foreach collection="vo.deptList" item="item" index="index"
                  separator="," open="(" close=")">
             #{item}
@@ -644,7 +751,7 @@
             #{item}
         </foreach>
         AND `project_status` IN (6,7,8,9,10,11,12,13,14,15, 16, 17)
-        and DATE_FORMAT(create_time, '%Y') = YEAR(NOW())-1
+        and YEAR(create_time) = YEAR(NOW())-1
     </select>
 
     <select id="selectSTSThisYear" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo">
@@ -656,7 +763,7 @@
             #{item}
         </foreach>
         AND `project_status` &gt; 4
-        and DATE_FORMAT(create_time, '%Y') = YEAR(NOW())
+        and YEAR(create_time) = YEAR(NOW())
     </select>
 
     <select id="selectmeiJiDu" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo"
@@ -693,7 +800,7 @@
             #{item}
         </foreach>
         AND `project_status` &gt; 4
-        and DATE_FORMAT(create_time, '%Y') = YEAR(NOW())
+        and YEAR(create_time) = YEAR(NOW())
     </select>
 
     <select id="selectCGThisMonth" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo"
@@ -707,14 +814,14 @@
                  separator="," open="(" close=")">
             #{item}
         </foreach>
-        AND project_status &gt; 16 AND DATE_FORMAT(create_time, '%Y') =MONTH(NOW()) ) de
+        AND project_status &gt; 16 AND MONTH(create_time) =MONTH(NOW()) ) de
         where d.demand_id = c.demand_id and purchase_dept_id in
         <foreach collection="vo.deptList" item="item" index="index"
                  separator="," open="(" close=")">
             #{item}
         </foreach>
         AND d.project_status &gt; 16
-        AND DATE_FORMAT(d.create_time, '%Y') = MONTH(NOW())
+        AND MONTH(d.create_time) = MONTH(NOW())
     </select>
 
     <select id="selectCGThisQua" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo"
@@ -728,14 +835,14 @@
                  separator="," open="(" close=")">
             #{item}
         </foreach>
-        AND project_status &gt; 17 AND DATE_FORMAT(create_time, '%Y') =QUARTER(NOW()) ) de
+        AND project_status &gt; 17 AND QUARTER(create_time) =QUARTER(NOW()) ) de
         WHERE d.demand_id = c.demand_id and purchase_dept_id in
         <foreach collection="vo.deptList" item="item" index="index"
                  separator="," open="(" close=")">
             #{item}
         </foreach>
         AND d.project_status &gt; 17
-        AND DATE_FORMAT(d.create_time, '%Y') = QUARTER(NOW())
+        AND QUARTER(d.create_time) = QUARTER(NOW())
     </select>
 
     <select id="selectZJLastYear" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo"
@@ -749,14 +856,14 @@
                  separator="," open="(" close=")">
             #{item}
         </foreach>
-        AND project_status IN (17,18) AND DATE_FORMAT(create_time, '%Y') = YEAR(NOW())-1 ) de
+        AND project_status IN (17,18) AND YEAR(create_time) = YEAR(NOW())-1 ) de
         WHERE d.demand_id = c.demand_id and purchase_dept_id in
         <foreach collection="vo.deptList" item="item" index="index"
                  separator="," open="(" close=")">
             #{item}
         </foreach>
         AND d.project_status IN (17,18)
-        AND DATE_FORMAT(d.create_time, '%Y') = YEAR(NOW())-1
+        AND YEAR(d.create_time) = YEAR(NOW())-1
     </select>
 
     <select id="selectTBThisYear" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo"
@@ -770,14 +877,14 @@
                  separator="," open="(" close=")">
             #{item}
         </foreach>
-        AND project_status &gt; 17 AND DATE_FORMAT(create_time, '%Y') = YEAR(NOW()) ) de
+        AND project_status &gt; 17 AND YEAR(create_time) = YEAR(NOW()) ) de
         WHERE d.demand_id = c.demand_id and purchase_dept_id in
         <foreach collection="vo.deptList" item="item" index="index"
                  separator="," open="(" close=")">
             #{item}
         </foreach>
         AND d.project_status &gt; 17
-        AND DATE_FORMAT(d.create_time, '%Y') = YEAR(NOW())
+        AND YEAR(d.create_time) = YEAR(NOW())
     </select>
 
     <select id="selectCCThisYear" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo"
@@ -790,6 +897,36 @@
             #{item}
         </foreach>
         AND real_purchase_finish_time &lt;=plan_purchase_finish_time
-        AND DATE_FORMAT(create_time, '%Y') = YEAR(NOW())
+        AND YEAR(create_time) = YEAR(NOW())
+    </select>
+
+    <sql id="countProjectExceedAndStatus">
+        SELECT ifnull(demand_id, 0) num,ifnull(sum(evaluation), 0) evaluationTotal
+        FROM pm_demand
+        WHERE purchase_dept_id in
+        <foreach collection="vo.deptList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND project_status in
+        <foreach collection="vo.projectStatusList" item="item" index="index"
+                 separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        AND real_purchase_finish_time &gt;plan_purchase_finish_time
+    </sql>
+
+    <select id="countProjectExceedAndStatus" resultType="com.ozs.pm.doman.vo.responseVo.StatisticalChartsResVo"
+            parameterType="com.ozs.pm.doman.vo.requestVo.PmDemandReqVo">
+        <include refid="countProjectExceedAndStatus"></include>
+        <if test="vo.demandIdAll !=null ">
+            AND demand_id in
+            <foreach collection="vo.demandIdAll" item="item" index="index"
+                     separator="," open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
     </select>
+
+
 </mapper>