buzhanyi 2 jaren geleden
bovenliggende
commit
d703d7f7e3

+ 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);
+    }
+}

+ 4 - 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)) {
@@ -1228,6 +1228,9 @@ public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears
                 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");
                 }

+ 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();
 }

+ 91 - 4
purchase-system/src/main/java/com/ozs/pm/mapper/PmDemandMapper.java

@@ -122,6 +122,13 @@ public interface PmDemandMapper extends BaseMapper<PmDemand> {
      */
     StatisticalChartsResVo countProjectExceedAllNum(@Param("vo") PmDemandReqVo pmDemandReqVo);
 
+    /**
+     * 执行停滞采购任务数量--退回的采购任务数量
+     *
+     * @return
+     */
+    StatisticalChartsResVo countProjectExceedTZ(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
     /**
      * 年度逾期项目数量
      *
@@ -158,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 majorProjectByStatus(@Param("vo") PmDemandReqVo pmDemandReqVo);
+    StatisticalChartsResVo majorProjectByStatusThisYearNew(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 本月度完成重大规划采购任务数量
+     *
+     * @param
+     * @return
+     */
+    StatisticalChartsResVo majorProjectByStatusThisMonthFi(@Param("vo") PmDemandReqVo pmDemandReqVo);
+
+    /**
+     * 本季度完成重大规划采购任务数量
+     *
+     * @param
+     * @return
+     */
+    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);
 
     /**
      * //执行滞后数量:指本年度逾期项目中,项目属性为“重大规划”的项目数
@@ -402,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();
+    }
 }

+ 135 - 44
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;
 
 
     /**
@@ -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;
@@ -1989,6 +1990,16 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
         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);
     }
 
@@ -2166,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);
     }
 
@@ -3266,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>

+ 117 - 22
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')
@@ -159,9 +159,7 @@
                  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 ( real_purchase_finish_time > plan_purchase_finish_time )
         and YEAR(create_time) = YEAR(NOW())
     </select>
 
@@ -174,9 +172,7 @@
                  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 ( real_purchase_finish_time > plan_purchase_finish_time )
         and quarter(create_time) = quarter(NOW())
     </select>
 
@@ -189,9 +185,7 @@
                  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 ( real_purchase_finish_time > plan_purchase_finish_time )
         and MONTH(create_time) = MONTH(NOW())
     </select>
 
@@ -204,9 +198,19 @@
                  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 ( 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"
@@ -287,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
@@ -297,8 +300,68 @@
             #{item}
         </foreach>
         AND find_in_set('1', project_attr)
-        AND `project_status` = #{vo.projectStatus}
-        AND YEAR(create_time ) = 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">
@@ -354,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"
@@ -446,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>
 
@@ -602,7 +666,8 @@
 
     <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}
@@ -832,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>